Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2013, 02:09   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Сменить фон рабочего стола, используя ListView (LVM_SETBKIMAGE)

Пытаюсь установить хук на експлорер, а получаю в ответ "неверные параметры". Как-то pid надо по-другому считать..
Код:
function GetPid():Cardinal;
var
  hSnap:THandle;
  pe:TProcessEntry32;
  pid: DWORD;
begin
  Result:=0;
 pe.dwSize:=SizeOf(pe);
 hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  If Process32First(hSnap,pe) then
    While Process32Next(hSnap,pe) do
      if ExtractFileName(pe.szExeFile)='explorer.exe' then
      begin
        showmessage(IntToStr(pe.th32ProcessID));
        Result:=pe.th32ProcessID;
        Exit;
      end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  h: HWND;
  pid:Cardinal;
begin
  pid:=GetPid;
  if pid=0 then
    exit;
  Caption:=IntToStr(pid);
  SetHook(pid);
  Button1.Caption:='Bad';
  if IsActive then
    Button1.Caption:='GOOD';
end;


//В длл..

procedure SetHook(pid: Cardinal); stdcall; export;
begin
  if HookHandle=0 then
   HookHandle:=SetWindowsHookEx(WH_CALLWNDPROC, @KeyHook, hInstance, pid);
  if HookHandle=0 then
  begin
    ShowMessage(IntToStr(GetLastError));
  end;
end;

Последний раз редактировалось TwiX; 10.06.2013 в 02:20.
TwiX вне форума Ответить с цитированием
Старый 10.06.2013, 07:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
pe.th32ProcessID
Это идентификатор процесса.
А SetWindowsHookEx принимает Specifies the identifier of the thread. Т.е. потока. Главного как я понимаю надо.
Т.е. тебе еще придется через OpenProcess() получать главный тред.
ИМХО.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2013, 09:34   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Да, уже разобрался. Результат 8 часов подряд перед гуглом.
Процесс по хендлу получал с помощью GetWindowProcessThreadId.
Спасибо
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается сменить фон у ListView. Нужно как-то сменить обработку WM_ERASEBKGND, судя по всему TwiX Win Api 2 09.06.2013 23:25
ListView рабочего стола (x32 и x64 системы) IvanNovator Win Api 2 22.01.2013 12:33
Сменить обои рабочего стола marik668 Общие вопросы Delphi 1 30.10.2010 18:17
Как сменить цвет фона рабочего стола? Paul Hindenburg Win Api 3 11.10.2009 05:50
Фон рабочего стола. Rahim1993 Общие вопросы Delphi 11 17.02.2008 21:40