Warlock
завсегдатай
Карма +0/-0
Offline
Расположение: Мурманск
Сообщений: 76
|
|
« : 22 Ноября 2000, 14:07 » |
|
а-а-у-у! Шарящие в windows API, отзовитесь! Дано: дескриптор окна Найти: 1. Как убить приложение, открывшее данное окно (sendmessage(Hanhle,WM_QUIT,0,0) и destroywindow работают не всегда, а с TerminateProcess и TerminateThred у меня чёто пока не получается, мож я чёто неправильно делаю?); 2. Как определить имя запускаемого файла этого приложения и путь к нему; Заранее благодарен всем ответившим. Примемеры желательно конечно на Delphi5 но и СИ я тоже понимаю немного;
|
|
|
Записан
|
|
|
|
Gunner
Гость
|
|
« Ответ #1 : 22 Ноября 2000, 14:16 » |
|
Ряд полезных фич для Delphi:
Как убрать окно с экрана и панели задач? Form1.Show; Form1.Hide;
Как рисовать в чужом окне или по всему экрану? procedure DrawOnScreen; var ScreenDC: hDC; begin ScreenDC := GetDC(0); {получить контекст экрана} Ellipse(ScreenDC, 0, 0, 200, 200); {нарисовать} ReleaseDC(0,ScreenDC); {освободить контекст} end;
Как спрятать/показать кнопку пуск? procedure Startbutton(visi:boolean); Var Tray, Child : hWnd; C : Array[0..127] of Char; S : String; Begin Tray := FindWindow('Shell_TrayWnd', NIL); Child := GetWindow(Tray, GW_CHILD); While Child <> 0 do Begin If GetClassName(Child, C, SizeOf(C)) > 0 Then Begin S := StrPAS(C); If UpperCase(S) |EQU APO|BUTTON' then begin If Visi then ShowWindow(Child, 1) else ShowWindow(Child, 0); end; End; Child := GetWindow(Child, GW_HWNDNEXT); End; End;
procedure TForm1.Button1Click(Sender: TObject); begin startButton(False); end;
procedure TForm1.Button2Click(Sender: TObject); begin startButton(True); end;
Как определить какие приложения уже запущены? procedure TForm1.Button1Click(Sender: TObject); VAR Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin ListBox1.Clear; Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {Не показываем:} IF (Wnd <> Application.Handle) AND {-Собственное окно} IsWindowVisible(Wnd) AND {-Невидимые окна} (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна} (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков} THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); ListBox1.Items.Add(StrPas(buff)); END; Wnd := GetWindow(Wnd, gw_hWndNext); END; ListBox1.ItemIndex := 0; end;
Как закрыть/открыть дверку CD-ROM? uses mmsystem;
..............
procedure TForm1.Button1Click(Sender: TObject); begin mciSendString('Set cdaudio door open wait', nil, 0, handle); end;
procedure TForm1.Button2Click(Sender: TObject); begin mciSendString('Set cdaudio door closed wait', nil, 0, handle); end;
Как убрать мою программу из списка Alt Ctrl Del? function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
implementation
procedure TForm1.Button1Click(Sender: TObject); begin //Hide if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 1); end;
procedure TForm1.Button2Click(Sender: TObject); begin //Show if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 0); end;
Как програмно переключить раскладку клавиатуры? procedure TForm1.Button1Click(Sender: TObject);//На русский var Layout: array[0.. KL_NAMELENGTH] of char; begin LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE); end;
procedure TForm1.Button2Click(Sender: TObject);//На английский var Layout: array[0.. KL_NAMELENGTH] of char; begin LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE); end;
Как програмно переключить состояние клавиш Num Lock, Caps Lock, Scroll Lock? VAR KS: TKeyboardState; begin GetKeyboardState(KS); KS[020] := KS[020] XOR 1; //Caps Lock KS[144] := KS[144] XOR 1; //Num Lock KS[145] := KS[145] XOR 1; //Scroll Lock SetKeyboardState(KS); end;
Как узнать версию DOS и Windows? VAR WinV: Word; DosV: Word;
begin WinV := GetVersion AND $0000FFFF; DosV := GetVersion SHR 16; Label1.Caption := IntToStr(Hi(DosV)) '.' IntToStr(Lo(DosV)); Label2.Caption := IntToStr(Lo(WinV)) '.' IntToStr(Hi(WinV)); end;
|
|
|
Записан
|
|
|
|
HBR
молодой
Карма +0/-0
Offline
Сообщений: 4
|
|
« Ответ #2 : 04 Декабря 2000, 10:25 » |
|
>> Warlock хай! Ничем помочь не могу Ж) Лучше бы дома почаще появлялся, хотябы в выходные. бай!
|
|
|
Записан
|
|
|
|
Warlock
завсегдатай
Карма +0/-0
Offline
Расположение: Мурманск
Сообщений: 76
|
|
« Ответ #3 : 15 Декабря 2000, 17:04 » |
|
>> Gunner Thank's, слушай, а может ты знаешь как устанавливать в NT права на доступ к запущенной программе? Например, администратор прописывает на автозагрузку всем пользователям приложение, но пользователь может просто снять его через диспетчер задач. Вот как сделать так, чтобы его могли снять только когда входили бы в систему как администраторы, а обычные пользователи не могли? Best regards Warlock.
|
|
|
Записан
|
|
|
|
Uswer
Гость
|
|
« Ответ #4 : 15 Декабря 2000, 19:08 » |
|
Можно ли по ярлыку программы отыскать саму программу?
|
|
|
Записан
|
|
|
|
HBR
молодой
Карма +0/-0
Offline
Сообщений: 4
|
|
« Ответ #5 : 16 Декабря 2000, 13:35 » |
|
>> Warlock Здорова хэк! Ну ты вопросик завернул! Хочешь апгрейдить антигеймер? Ну-ну, удачи тебе в этом запарном деле! А каков всетаки я папан!
|
|
|
Записан
|
|
|
|
HBR
молодой
Карма +0/-0
Offline
Сообщений: 4
|
|
« Ответ #6 : 16 Декабря 2000, 13:43 » |
|
>> Uswer Конечно можно
|
|
|
Записан
|
|
|
|
Name
молодой
Карма +0/-0
Offline
Сообщений: 3
|
|
« Ответ #7 : 16 Декабря 2000, 14:09 » |
|
>> Uswer Ты что совсем тупой? Ты когда последний раз компьютером пользовался? Купи себе очень умную книжку Windows для чайников называется!!!
|
|
|
Записан
|
|
|
|
Name
молодой
Карма +0/-0
Offline
Сообщений: 3
|
|
« Ответ #8 : 16 Декабря 2000, 14:13 » |
|
>> HBr Серега это ты?
|
|
|
Записан
|
|
|
|
Warlock
завсегдатай
Карма +0/-0
Offline
Расположение: Мурманск
Сообщений: 76
|
|
« Ответ #9 : 21 Декабря 2000, 14:49 » |
|
Конечно он, а ктож ещё. Это конечно хорошо что сюда хоть ктото заходит, но темнеменее для чайников повторяю название темы. Плиз обратите внимание что это "Полезные фичи и советы по программированию" а не "Руководство по пользованию MS WINDOWS".
А теперь по делу. Тут меня просветили что подобную фичу для закрытия доступа пользователям к запущенному приложению так как я прошлый раз описал сама система не выполняет. Т.е. её можно реализовать только всякими разными манёврами и наворотами, что собственно сложно, глупо и никому не нужно. А на самом же деле мою проблему можно решить проще. Как известно абсолютно все процессы в НТ снять нельзя(при которых система выдаёт сообщение типа "Операция не может быть завершена.Нет доступа."). Так вот можно попытаться зарегестрировать свой процесс, чтобы он стал системным(например таким же образом как убирается приложение из списка задач в 95-м). Может кто подскажет как это зделать?
Best regards, --==[WARLOCK]==--.
|
|
|
Записан
|
|
|
|
YSG
Гость
|
|
« Ответ #10 : 03 Февраля 2001, 14:55 » |
|
Группа разработчиков ПО предлагает услуги по разработке: - компоненты VCL, ActiveX (СОМ) - прикладные программы для Win 9x/NT - приложения баз данных (локальные, клиент - сервер) - WEB-дизайн через Интернет или локально в Санкт-Петербурге. Опыт более 6 лет, качество, гарантии. http://ysg.nm.rue-mail: ysg@nm.ru или krons@nm.ru
|
|
|
Записан
|
|
|
|
max
молодой
Карма +0/-0
Offline
Сообщений: 7
|
|
« Ответ #11 : 17 Февраля 2001, 15:29 » |
|
Как узнать все дескрипторы окон в Win9x ???
|
|
|
Записан
|
|
|
|
Warlock
завсегдатай
Карма +0/-0
Offline
Расположение: Мурманск
Сообщений: 76
|
|
« Ответ #12 : 21 Февраля 2001, 12:08 » |
|
Max >> смотри enumwindows,enumchildwindows, getwindow,findwindow и тюдю
|
|
|
Записан
|
|
|
|
Warlock
завсегдатай
Карма +0/-0
Offline
Расположение: Мурманск
Сообщений: 76
|
|
« Ответ #13 : 21 Февраля 2001, 12:14 » |
|
А вот теперь к вам ко всем вот такой вопросик Вот вам програмка:
program Project1; uses windows,Sysutils; var clast,sect,bytes:word; FreeSize: int64; begin asm MOV AH,36H ;номер функции MOV DL,3 ;накопитель A INT 21H ;получаем информацию mov word ptr clast,BX ;сколько ;свободных ;кластеров mov word ptr sect,AX ;сколько ;свободных ;секторов mov word ptr bytes,CX ;сколько ;свободных ;байт end; if sect<>$ffff then FreeSize:=clast*sect*bytes; messagebox(0,pchar(inttostr(FreeSize),'Disk info',mb_ok); end.
В пятой дельфе данный код просто напрочь её вешает Ж8-[ ]]]]
А теперь внимание вопрос: ПОЧЕМУ????????
|
|
|
Записан
|
|
|
|
Сережка
Гость
|
|
« Ответ #14 : 28 Марта 2001, 09:42 » |
|
Gunner >>Как сохранить(загрузить)Label.Caption в Delphi5.
|
|
|
Записан
|
|
|
|
Jungle-Bee
Гость
|
|
« Ответ #15 : 28 Марта 2001, 12:00 » |
|
Warlock >>
var clast,sect,bytes:word; FreeSize: longint; begin asm MOV AH,36H MOV DL,3 INT 21H mov word ptr clast,BX mov word ptr sect,AX mov word ptr bytes,CX end;
if sect<>$ffff then FreeSize:=longint(clast)*sect*bytes else FreeSize:=0; Writeln(FreeSize, ': ',clast,': ',sect,': ',bytes); {messagebox(0,pchar(inttostr(FreeSize),'Disk info',mb_ok);} end.
На Pascal'е всё фурычит со свистом ! Вывод: PASCAL RuleZZZ !!!
|
|
|
Записан
|
|
|
|
FoodTechnologist
Гость
|
|
« Ответ #16 : 03 Апреля 2001, 11:38 » |
|
Warlock >> INT 21H См. Рубенкинг "Турбо паскаль для Windows" глава "Кто боится реального режима". Даже в win16 не все так просто. А в win32... Конечно, надо посмотреть, в чем ошибка, но так нагло вызывать прерывания - не думаю. А в делфи параллельно отладка идет, ее повесить немудрено. Больше ничего повесить, по-моему не может.
Да, кстати: использование ассемблера, апи в несистемных программах - дурной тон. (это, конечно, системная). См. мою новую тему
|
|
|
Записан
|
|
|
|
CORPSE
завсегдатай
Карма +0/-0
Offline
Расположение: Murmansk
Сообщений: 165
|
|
« Ответ #17 : 24 Апреля 2001, 17:24 » |
|
ALL WHO NEED------>Знаю пару полезных фич на XEON|tm| двухпроцессорный т.к. дома таковой имею,ели есть у кого-нибудь вопросы скажу чё надо.....TRUST ME CUANDOS DIAS TODAVIAS!
|
|
|
Записан
|
||CORPSE||
|
|
|
Ocean
молодой
Карма +0/-0
Offline
Сообщений: 9
|
|
« Ответ #18 : 08 Мая 2001, 16:23 » |
|
Jungle-Bee >> Матерь божия это зачем это? Хтож так делает?
|
|
|
Записан
|
|
|
|
Jungle-Bee
Гость
|
|
« Ответ #19 : 11 Мая 2001, 11:18 » |
|
Ocean >> Так покажи нам с Warlock'ом как надо, и мы повеселимся вместе с тобой, какие мы были не разумные.
|
|
|
Записан
|
|
|
|
|