Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

как автозагрузить прогу не используя папку Автозагрузка?   Найти похожие ветки 

 
Winni   (2003-03-06 18:25) [0]

Собствено, вопрос уместился в заголовок. Нужно научиться загружать полезные программы, не используя папку "Автозагрузка". Так загружаются некоторые антивирусы и другие, которые сидят в трее.
Нашел несколько статей по SysTray но автозагрузки там не нашел.
Спасибо тем, кто сообщит что-нибудь по этому вопросу.


 
}{enon   (2003-03-06 18:31) [1]

А в реестр не заглядывал?
Ключ: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]


 
Palladin   (2003-03-06 18:32) [2]

ты бы еще по Desktop статьи поискал...
но мне интересно для чего это тебе?


 
Winni   (2003-03-07 14:12) [3]

Спасибо за помощь, правда пока не пробовал реестр мучить.

Уважаемый Palladin !
Цель я преследую нехорошую. У меня в школе на уроках
информатики детишки иногда запускают игры всякие.
Так я, злодей, сделал программку, которая ловит эти игры за заголовок окошка и посылает им WM_CLOSE.
Но поскольку запускается это как автозагрузка, это нетрудно
убрать. Можно также воспользоваться диспетчером задач - удалить процесс.
Примечание: случайно получилось, что программка абсолютно невидимая (на панели задач). Ерунда все это конечно, но хочется довести до ума.


 
AleksandrKu   (2003-03-07 14:14) [4]

попробуй реестр обычно получается;)


 
Winni   (2003-03-07 14:21) [5]

Теперь вижу и совет от AleksandrKu.
Спасибо!
В этом месте реестра я вижу : Параметр Internat.exe
Значание "Internat.exe".
Что же дальше? Добавить ниже:
( Параметр) MyProg1
( Значение ) Prog1.exe
т е добавить параметр и значение
Такое можно пробовать ? ( Боюсь я немного реестра. Возможно, это пройдет )



 
AleksandrKu   (2003-03-07 14:23) [6]

да ты правильно понял а бояться нестоит


 
AleksandrKu   (2003-03-07 14:27) [7]

Worm.Klez.W32 использовал эту вещь вовсю причем почти каждую секунду проверян на существовании этой записи и если ненаходил то опять себя туду прописывал (паразит)


 
AleksandrKu   (2003-03-07 14:38) [8]

Да еще чуть незабыл на уровень выше есть RunServices
а в 98 насколько помню Services (если кто помнит поправит) там хорошо прописываются консольнык=е программы так что в Диспеджчере программ невидно!!!


 
Winni   (2003-03-07 18:23) [9]

Спасибо, AleksandrKu !
Все пробовал, все работает. Windows NT4.
Консольные программы еще не пробовал. А можно ли оформить в консольном виде эту программу? Там WinAPI: FindWindow(по имени окна); затем Send/PostMessage(h,WM_Close);
Понимаю, что проще попробовать самому, но что-то сегодня не хочется.


 
DVM   (2003-03-07 19:25) [10]

штук 20 мест есть в винде откуда автозапуск можно сделать.


 
Winni   (2003-03-10 12:24) [11]

Привет, хлопцы!
Праздник, вроде, прошел, можно снова продираться сквозь дебри программирования.
Уважаемый DVM !
Если можно, сообщи, пожалуйста, еще один - два способа решения этой задачки.
Мои попытки сделать эквивалентное консольное приложение пока ничего не дали. Прежде всего - появляется окно и я пока не могу его убрать. Потом - не могу заставить Timer что-нибудь делать, например, Beep в процедуре TimOnTimer. То есть опять же - грамотность моя сильно дырявая. Но это уже получается другой вопрос.


 
Nic_B   (2003-03-10 14:01) [12]

Я занимался подобной проблемой (запрет на запуск игрушек). WM_Close не совсем удачная реализация т.к. очень много игрушек не выгружаются а выдают еще подтверждение на закрытие (т.е. его можно отменить). Лучше сделать через TerminateProcess.


 
Winni   (2003-03-10 14:12) [13]

Спасибо за идею, Nic_B !
Попробую.



 
Winni   (2003-03-10 14:56) [14]

Моя грамотность опять меня подвела. Не получилось TerminateProcess. Просто я не нашел такого WM_TerminateProcess, а через чего добиваться такого эффекта- не знаю. По идее это метод приложения ..., так что вроде бы нужно найти дескриптор приложения, связанного с окном. Но не уверен я в этом, смогу проверить только дома, где лежит толстый Эпплман (WinAPI + VB)
Если кто-нибудь поможет продвинуться в этом направлении - за мной виртуальная упаковка виртуального пива.


 
Nic_B   (2003-03-11 10:33) [15]

Я делал так (извиняюсь за качество кода - все делалось в очень сжатые сроки а потом было влом переделывать).
..
const
PROCESS_TERMINATE = $0001;
..
var
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
GameName: ARRAY [1..9]OF String;
zName: String;
i,n: Integer;
ProcessHandle : THandle;
ProcessID: Integer;

procedure TKGForm.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := false;
ServerSocket.Active := True;
GameName[1]:="GAME";
GameName[2]:="POOL";
GameName[3]:="EGG";
GameName[4]:="CASINO";
GameName[5]:="DURAK";
GameName[6]:="ИГРА";
GameName[7]:="DELTA";
GameName[8]:="PORSCH";
//GameName[8]:="3D";
GameName[9]:=" ";
end;

procedure TKGForm.Timer1Timer(Sender: TObject);
begin
// Проверка на сообщение извне
if GameName[9]=" " then n:=8
else n:=9;

Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Hе показываем:}
// IF (Wnd <> Application.Handle) AND {-Собственное окно}
IF IsWindowVisible(Wnd) AND {-Hевидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
//
ZName:=AnsiUpperCase(String(buff)); // преобразуем к верхнему регистру

// Если подключен клиент пробуем посылать сообщения
//ServerSocket.Socket.Connections[0].SendText(ZName+#0);
if IsServer then
ServerSocket.Socket.Connections[0].SendText(ZName);

For i:=1 to n do
If Pos(GameName[i],zName)<>0 Then Begin
GetWindowThreadProcessID(Wnd, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
// end;
if GameName[9]<>" " then GameName[9]:=" ";
end;

В общем примерно таким образом. (по крайней мере работает)

Winni - у меня клиент-серверный вариант - если нужны исходники, вышлю.


 
aleksey_sv   (2003-03-11 15:24) [16]


> Winni © (10.03.03 12:24)


> Прежде всего - появляется окно и я пока не могу его убрать.

Просто убери
{$APPTYPE CONSOLE}

А вместо таймера можно использовать такую структуру
while true do
begin
<Код>
sleep(1000);
end;


 
Winni   (2003-03-13 19:59) [17]

Привет всем !

В результате общей помощи вот что у меня получилось:
( Но перед кодом должен сказать, что убиение программы ч/з TerminateProcess действительно лучше. WM_Close некорректно закрывало окна MS-DOS ( игры Lines, Mario ) )

unit Unit1;

interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
end;

var Form1: TForm1;

implementation

Var ProcessID : Integer; ProcessHandle : THandle;

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
Const cycl : Byte = 0; Max = 8;
Var Hwnd1: Hwnd; Str1: array [1..Max] of String;
begin Str1[1] := "Пасьянс "Косынка"";
Str1[2] := "Пинбол для Windows - "Звездный юнга"";
Str1[3] := "Сапер";
Str1[4] := "Пасьянс";
Str1[5] := "Длинные нарды 2.0";
str1[6] := "V_LINES";
Str1[7] := "Linkz";
Str1[8] := "MARIO";
Inc(cycl); If cycl > Max then cycl := 1;
Hwnd1 := FindWindow(Nil,PChar(Str1[cycl]));

If Hwnd1 <> 0 then
begin
try
GetWindowThreadProcessID(HWnd1, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
except
end;
end;
end;

end.


 
Nic_B   (2003-03-14 10:49) [18]

Еще бы переписать все это на WinAPI, програ выходит около 20 кил всего. да и памяти отжирает меньше.
Удачи в борьбе с геймерами :)))


 
Winni   (2003-03-15 19:09) [19]

Доброго здоровья всем обитателям Форума !
Уважаемый Nic_B !

Что ты имеешь в виду под WinAPI ! Ведь кусочки его, т е функции WinAPI у меня используются. Например, GetWindowThreadProcessID.
Программа получилась 181 кб, конечно, многовато.
Мне советовали сделать консольное приложение, тогда оно было бы гораздо меньше. Но его недостаток - появляется окошко при запуске, т е оно себя демасирует. Это же (которое получилось) - работает скрытно.
Борьба с геймерами, конечно, дело безнадежное, рано или поздно найдут в чем дело, тогда придется придумывать что-либо новое. Т е моя надежда в том, чтобы быстро осваивать что-нибудь новенькое.


 
Nic_B   (2003-03-17 08:53) [20]

Имеется в виду, чтобы это самое окно создать средствами API не прибегая к делфофской VCL. В примерах в нелпе по WinApi приведен пример такого построения окна. т.е. нам останется привесить на это дело таймер и отловить сообщение WM_TIMER. И все. Ну примерно так. (Извиняюсь за качество кода - все писалось прямо сейчас) но работает.:

program kg;

uses
windows,
messages;

{"модули windows и messages самые необходимые - они обязательно должны быть
объявлены в начале каждой Вашей программы!}
type
TRegisterServiceProcess = function (dwProcessID, dwType: DWord) :DWord;
stdcall;

const
PROCESS_TERMINATE = $0001;

var
wc : TWndClassEx; //Переменная шаблона класса окна
MainWnd, Wnd : HWND; //Описатель главного окна
Mesg : TMsg; //Переменная для цикла сбора сообщений
{ Далее следует оконная процедура главного окна. Обратите внимание на служебное
слово stdcall оно вынуждает компиллятор генерировать особый вид кода, который

может быть вызван любой windows-программой, без этого служебного слова
программа не сможет работать вообще!}
buff: ARRAY [0..127] OF Char;
GameName: ARRAY [1..8]OF String;
zName: String;
ProcessHandle : THandle;
ProcessID, I: Integer;

RegisterServiceProcess: TRegisterServiceProcess;
hNdl : THandle;
info : TOSVersionInfo; // Для определения NT or Win9x


function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult;
stdcall;

//Выдрана из sysutils
//Перевод значений в верхний регистр
function AnsiUpperCase(const S: string): string;
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PChar(S), Len);
if Len > 0 then CharUpperBuff(Pointer(Result), Len);
end;


 
Nic_B   (2003-03-17 08:55) [21]

procedure time_kg;
begin
// Событие по таймеру
Wnd := GetWindow(MainWnd, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Hе показываем:}
// IF (Wnd <> Application.Handle) AND {-Собственное окно}
IF IsWindowVisible(Wnd) AND {-Hевидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
//
ZName:=AnsiUpperCase(String(buff)); // преобразуем к верхнему регистру

For i:=1 to 8 do
If Pos(GameName[i],zName)<>0 Then Begin
GetWindowThreadProcessID(Wnd, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;

end;

Begin
{Далее происходит цикл обработки сообщений}
case msg of
WM_TIMER: Time_KG;
wm_destroy : //Сообщение посылаемое при уничтожении окна
Begin
KillTimer(MainWnd, 1);
postquitmessage(0); exit;

Result:=0;
End
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;

{Переменные xPos,yPos,nWidth,nHeight в принципе не нужны, однако я их завел
(и вам рекомендую) для лучшей читабельности программы}

var
xPos,yPos,nWidth,nHeight : Integer;
begin //Тело программы
{ Далее идет заполнение шаблона класса окна}

wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;

wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="WinMin : Main";
RegisterClassEx(wc); //Регистрация нового класса в системе

{"заполнение переменных xPos,yPos,nWidth,nHeight}

xPos:=100;
yPos:=150;
nWidth:=30;
nHeight:=40;

{ Создание главного окна}
MainWnd:=CreateWindowEx (
0, //флаги расширенных стилей
"WinMin : Main", //имя класса окна, данное при заполнении структуры wc
"KG", //заголовок окна
ws_overlappedwindow, //флаги стилей окна
{подробнdее о стилях см. после текста программы}
xPos, //горизонтальная позиция окна
yPos, //вертикальная позиция окна

nWidth, //ширина окна
nHeight, //высота окна
0, //описатель родительского окна (parent) или окна-владельца (owner)
0, //описатель меню окна (меню нет, нет и описателя)
Hinstance, //описатель приложения
nil //address of window-creation data
);
ShowWindow(MainWnd,CmdShow); //Отображаем окно
//ShowWindow(MainWnd,SW_HIDE); //В рабочем варианте

{Проверяем - Win95 или NT.}
info.dwOSVersionInfoSize := sizeof(info);
GetVersionEx(info);
if (info.dwPlatformId = VER_PLATFORM_WIN32_NT) then begin
// Это NT
end else begin
hNdl:=LoadLibrary("KERNEL32.DLL");
RegisterServiceProcess:=GetProcAddress(hNdl,"RegisterServiceProcess");
RegisterServiceProcess(GetCurrentProcessID,1);
FreeLibrary(hNdl);
end;

SetTimer(MainWnd,
1,
10000,
nil); //Устанавливаем таймер на себя

//Инициализируем массив игрушек
GameName[1]:="GAME";
GameName[2]:="POOL";
GameName[3]:="EGG";
GameName[4]:="CASINO";
GameName[5]:="DURAK";
GameName[6]:="ИГРА";
GameName[7]:="DELTA";
GameName[8]:="PORSCH";

//StartServer(1025); //Стартует сервер
//Цикл обработки сообщений
//он может слегка видоизменяться, но эти строчки присутсвуют всегда

While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.


 
Nic_B   (2003-03-17 08:58) [22]

Чтобы при запуске окно не отображалось поменять строки
с ShowWindow(MainWnd,CmdShow); //Отображаем окно

на ShowWindow(MainWnd,SW_HIDE); //В рабочем варианте



 
Севостьянов Игорь   (2003-03-17 11:30) [23]

А лучше написать сервис и забыть о проблемах...
Нужна информация об этом пиши на мыло...


 
Winni   (2003-03-17 18:50) [24]

Привет, привет, привет !
Спасибо громадное за идеи и помощь !

Уважаемый Nic_B ! Постараюсь разобраться с этими текстами, возможно, грамотность моя повысится и я сделаю прогу в этом стиле. Пока что распечатал и буду изучать на досуге.

Уважаемый Игорь !
Сервисов я еще не производил, но думаю, что с удовольствием познакомлюсь с такой технологией.


 
Leks   (2003-03-20 18:47) [25]

Доброго времени суток! Я вот тут похожую прогу пишу, только более глобальную, сучетом времени.. Может мы скооперируемся или хотябы мыслями обменяемся, может что толковое получиться.
Мыльте если что!


 
Intell   (2003-03-22 19:44) [26]

uses
Registry, {For Win32}
IniFiles; {For Win16}

{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}

{For Win32}
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey("Software\Microsoft\Windows\CurrentVersion\Run",
false);
reg.WriteString("My App", Application.ExeName);
reg.CloseKey;
reg.free;
end;


{For Win16}
procedure TForm1.Button2Click(Sender: TObject);
var
WinIni : TIniFile;
WinIniFileName : array[0..MAX_PATH] of char;
s : string;
begin
GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
StrCat(WinIniFileName, "\win.ini");
WinIni := TIniFile.Create(WinIniFileName);
s := WinIni.ReadString("windows",
"run",
"");
if s = "" then
s := Application.ExeName else
s := s + ";" + Application.ExeName;
WinIni.WriteString("windows",
"run",
s);
WinIni.Free;
end;

Пробуй, у меня проканало.
sergein@nojabrsk.ru



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.01 c
1-59675
anbezr
2003-05-07 14:54
2003.05.19
Можно ли компилятор Delphi сделать критичным к регистру символов


6-59833
CRACKISH
2003-03-12 07:47
2003.05.19
Как с помощю TClientSocket и TServerSocket отправить скриншот?


7-59972
Ciber_SLasH
2003-03-15 23:57
2003.05.19
Как передать байт в порт LPT в WinXP?


14-59913
Suntechnic
2003-04-30 06:58
2003.05.19
Windows Media Player 9 problem


1-59736
AVovikA
2003-05-05 18:02
2003.05.19
Что осталось после удаления формы?!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский