Города на Мурмане
25 Ноября 2024, 10:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
   Начало   ПРАВИЛА Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Полезные фичи и советы по программированию  (Прочитано 46057 раз)
Warlock
завсегдатай
***

Карма +0/-0
Offline 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 Offline

Сообщений: 4


« Ответ #2 : 04 Декабря 2000, 10:25 »

>> Warlock
хай!
Ничем помочь не могу Ж)
Лучше бы дома почаще появлялся, хотябы в выходные.
бай!
Записан
Warlock
завсегдатай
***

Карма +0/-0
Offline Offline

Расположение: Мурманск
Сообщений: 76


« Ответ #3 : 15 Декабря 2000, 17:04 »

>> Gunner
Thank's, слушай, а может ты знаешь как устанавливать в NT права на доступ к запущенной программе? Например, администратор прописывает на автозагрузку всем пользователям приложение, но пользователь может просто снять его через диспетчер задач.
Вот как сделать так, чтобы его могли снять только когда входили бы в систему как администраторы, а обычные пользователи не могли?
Best regards Warlock.
Записан
Uswer
Гость
« Ответ #4 : 15 Декабря 2000, 19:08 »

Можно ли по ярлыку программы отыскать саму программу?
Записан
HBR
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 4


« Ответ #5 : 16 Декабря 2000, 13:35 »

>> Warlock
Здорова хэк! Ну ты вопросик завернул!   Хочешь апгрейдить антигеймер? Ну-ну, удачи тебе в этом запарном деле! А каков всетаки я папан!
Записан
HBR
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 4


« Ответ #6 : 16 Декабря 2000, 13:43 »

>> Uswer
Конечно можно
Записан
Name
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 3


« Ответ #7 : 16 Декабря 2000, 14:09 »

>> Uswer
Ты что совсем тупой?
Ты когда последний раз компьютером пользовался?
Купи себе очень умную книжку Windows для чайников называется!!!
Записан
Name
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 3


« Ответ #8 : 16 Декабря 2000, 14:13 »

>> HBr
Серега это ты?
Записан
Warlock
завсегдатай
***

Карма +0/-0
Offline 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.ru
e-mail: ysg@nm.ru  или  krons@nm.ru
Записан
max
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 7


« Ответ #11 : 17 Февраля 2001, 15:29 »

Как узнать все дескрипторы окон в Win9x ???
Записан
Warlock
завсегдатай
***

Карма +0/-0
Offline Offline

Расположение: Мурманск
Сообщений: 76


« Ответ #12 : 21 Февраля 2001, 12:08 »

Max >>
смотри enumwindows,enumchildwindows, getwindow,findwindow и тюдю
Записан
Warlock
завсегдатай
***

Карма +0/-0
Offline 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 Offline

Расположение: Murmansk
Сообщений: 165


WWW
« Ответ #17 : 24 Апреля 2001, 17:24 »

ALL WHO NEED------>Знаю пару полезных фич на XEON|tm| двухпроцессорный т.к. дома таковой имею,ели есть у кого-нибудь вопросы скажу чё надо.....TRUST ME CUANDOS DIAS TODAVIAS!
Записан

||CORPSE||
Ocean
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 9


« Ответ #18 : 08 Мая 2001, 16:23 »

Jungle-Bee >>
 Матерь божия это зачем это?
Хтож так делает?
Записан
Jungle-Bee
Гость
« Ответ #19 : 11 Мая 2001, 11:18 »

Ocean >>
Так покажи нам с Warlock'ом как надо, и мы повеселимся вместе с тобой, какие мы были не разумные.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines
Wap | PDA | Обратная связь
Valid XHTML 1.0! Valid CSS!