Вопрос по API
invoke GetCurrentDirectory,40,ADDR Catalog
invoke GetFileSizeEx, Sustem(что здесь указать путь к файлу это понятно),В книге пишется что тут указывают на структуру LARGE_INTEGER для сохранения размера файла так где или как получить размер. Про структуру ничего непонятно там всего в 5 словах.
invoke WriteFile,Путь к файлу, Переменная для записи тоже понятно,?,?,?
И как скопировать в буфер например не 1 строчку а 10.
Какой Api или Macro можно слаживать данные в буфере Catalog и Bufer
C Macro вообще толком нечего непонятно
Такая же проблема и с ReadFile
Invoke GetCursorPos,Позиция курсора, сюда переменная нужна или ???.
Invoke EnableMenuItem,дескриптор меню де его взять ,IDB_EXIT,MF_DISABLE
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getcurrentdirectory.asp
Все остальное там же.
Нашел с чего асм изучать, однако.
Все остальное там же.
Нашел с чего асм изучать, однако.
мне непонятна дапустим как раотает эта API
GetFileSizeEx, Sustem(что здесь указать путь к файлу это понятно),В книге пишется что тут указывают на структуру LARGE_INTEGER для сохранения размера файла так где или как получить размер. Про структуру ничего непонятно там всего в 5 словах.
LARGE_INTEGER - это по сути 64-х битное значение. Чтобы представлять большие числа.
mov File,eax
invoke CloseHandle,File
И ещо маленький вапрос вот [COLOR="Blue"]invoke WriteFile,File,ADDR Opisanie,25,ADDR ZBute,NULL[/COLOR] записывает в файл а надо ещо пару параметров записать только с новой строчки как это выполнить.
Заранее спасибо.
например:
Код:
buffer db "первая строчка", 13,10, 0
Все что ты запишешь после этого появится в файле с новой строки:-)))
Спасибо.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="3.5.0.1442"
processorArchitecture="X86"
name="????"
type="win32"
/>
<description>Restorator: Edit Resources and User Interface</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Или точнее как зделать чтобы программа имела оформление под Xp
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="3.5.0.1442"
processorArchitecture="X86"
name="????"
type="win32"
/>
<description>Restorator: Edit Resources and User Interface</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Или точнее как зделать чтобы программа имела оформление под Xp[/QUOTE]
Нужно либо включить данный текст как ресурс с кодом 24 (RT_MANIFEST) и именем 1
либо в каталоге с екзешником (например MyProgram.exe создать файл типа MyProgram.exe.manifest в UTF-8 и вставить туда этот текст.
Исчо можно изменить описание (<description>...</description> и имя проги (<assemblyIdentity>\<name> (где ????)
Код:
#define IDR_RT_MANIFEST1 1
#define IDD_DIALOG1 101
#define IDC_CHECK1 1001
#define IDC_RADIO1 1002
#define IDC_SLIDER1 1003
#define IDD_DIALOG1 101
#define IDC_CHECK1 1001
#define IDC_RADIO1 1002
#define IDC_SLIDER1 1003
:-))))
Если надо, могу пример на VC++ скинуть, с пошаговым описанием.
И примерчик тоже прегодиться.
Насчет сетей - информации в сети навалом! :-))))
Вот как подключить манифест на XP, в VC++ проект MFC автоматически подшивает его, а если пишешь Win32 Project, то тут приходится все делать ручками., и вот как (лень второй раз писать):
http://forum.codenet.ru/showthread.php?p=123148#post123148
Пример во вложении:-))))
Run db 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
Run2 db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
Run3 db 'HKEY_LOCAL_MACHINE',0
Exe db "\IMAGE.exe",0
.data?
Hkey HKEY ?
....
invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,addr Run2,NULL,KEY_QUERY_VALUE,Hkey
invoke RegSetValueEx,HKEY_LOCAL_MACHINE,NULL,addr Run,REG_SZ,addr Catalog,addr Exe
invoke RegCloseKey,Hkey
Это ветка автозагрузки, вот как можно прописать там себя:
Код:
HKEY key;
CHAR Buf[80];
strcpy(Buf, "C:\\my_program.exe");
RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &key);
RegSetValueEx(key, "MyProgram", 0, REG_SZ, (LPBYTE) Buf, strlen(Buf) + 1);
RegCloseKey(key);
CHAR Buf[80];
strcpy(Buf, "C:\\my_program.exe");
RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &key);
RegSetValueEx(key, "MyProgram", 0, REG_SZ, (LPBYTE) Buf, strlen(Buf) + 1);
RegCloseKey(key);
Как мне задать D:\WinAsm\Progect\Sustem\asd.exe "asd.exe"- консольное приложение мне надо чтобы оно получила -Q -Z 0, C:\ghp.exe Чтото Вроде a.bat=>содержит D:\WinAsm\Progect\Sustem\asd.exe -Q -Z 0, C:\ghp.exe
ShellExecute(NULL, "open", "D:\\WinAsm\\Progect\\Sustem\\asd.exe", " -Q -Z 0, C:\\ghp.exe", "D:\\WinAsm\\Progect\\Sustem", SW_SHOWNORMAL);
Спасибо вам всем!
Подскажите какую небуть литературу по работе в сети желательно в MASM а то я его сейчас изучаю (мне никак ненайти везде на С++).
Есть ли вазможность читать из файла например чтобы первая строка была в переменной "A" а другая в "B"
Заранее спасибо.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowprocedures/windowprocedurereference/windowprocedurefunctions/windowproc.asp
Я уже совсем запутался.Может кто распишет что к чему?
Windows - система окон и оконных сообщений. Перед созданием самого окна нужно зарегистрировать его класс. В этом классе можно указать иконку для окна, курсор, и т.д(если надо подробнее - смотри описание RegisterClassEx и WNDCLASSEX).
Но в экземпляре WNDCLASSEX нужно обязательно указать какая функция будет принимать и обрабатывать оконные сообщения. Прототип этой функции один и тот же ВСЕГДА, это typedef LRESULT (*WNDPROC)(HWND, UINT, WPARAM, LPARAM), а названия переменных, как и самой функции могут быть разные. Это оконная процедура.
Допустим пользователь закрывает окно, нажав крестик - система отсылает нашему окну во втором параметре сообщение WM_CLOSE, наша оконная процедура должна ее обработать(как она ее будет обрабатывать зависит от программиста ;-))))
Вот пример:
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND: // какая-нибудь команда, например нажатие кнопки, выбор меню и т.д
{
break;
}
case WM_PAINT: // рисуем на окне
{ hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY: // уничтожение окна
{
PostQuitMessage(0);
break;
}
default: // мы можем не обрабатывать ВСЕ сообщения, а только нужные. все что мы не обработали нужно отдавать функции DefWindowProc.
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
{
switch (message)
{
case WM_COMMAND: // какая-нибудь команда, например нажатие кнопки, выбор меню и т.д
{
break;
}
case WM_PAINT: // рисуем на окне
{ hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY: // уничтожение окна
{
PostQuitMessage(0);
break;
}
default: // мы можем не обрабатывать ВСЕ сообщения, а только нужные. все что мы не обработали нужно отдавать функции DefWindowProc.
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Код:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;
WNDCLASS wcl;
MSG msg;
char classname[]="myprog";
wcl.style = CS_HREDRAW | CS_VREDRAW;
wcl.lpfnWndProc = (WNDPROC)WndProc;
wcl.hInstance = hInstance;
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcl.hCursor=LoadCursor(NULL, IDC_ARROW);
wcl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcl.lpszClassName =classname ;
wcl.lpszMenuName=NULL;
RegisterClass(&wcl);
hWnd=CreateWindow(classname,"myprog",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, 300, 300,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch(msg)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&Rect);
DrawText(hDC,"jggnf",-1,&Rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wparam,lparam);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;
WNDCLASS wcl;
MSG msg;
char classname[]="myprog";
wcl.style = CS_HREDRAW | CS_VREDRAW;
wcl.lpfnWndProc = (WNDPROC)WndProc;
wcl.hInstance = hInstance;
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcl.hCursor=LoadCursor(NULL, IDC_ARROW);
wcl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcl.lpszClassName =classname ;
wcl.lpszMenuName=NULL;
RegisterClass(&wcl);
hWnd=CreateWindow(classname,"myprog",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, 300, 300,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch(msg)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&Rect);
DrawText(hDC,"jggnf",-1,&Rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wparam,lparam);
}
Что там может быть не так :confused: :confused: .Или используемый мной пример настолько устарел что это все на ХР вообще неможет работать :confused:
Код:
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
wcl.cbWndExtra = 0;
Код:
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
wcl.cbWndExtra = 0;
Нет не то. :) Лутчше скажи какие либы надо прикрутить
Как какие? стандартные, которые автоматически подшиваются вполне хватит. я на VC++ 7.0 свободно откомпилил. что за ошибку хоть показывает?
Unresolve external '_main' и дальше имя *.obj файла .А если в 6 VC выбрать use static MFC libraries то выдает аж 17 ошибок при линковке
создаешь обычный Win32 Project, а в настройках указываешь Windows Application, и ставишь галочку Empty. никакого MFC тут не надо и быть не должно.
Я так и сделал присоединил cpp файл но все равно при линковке выдало 4 ошибки .
Напоминает прием родов по телефону...
_nic, я просто скопировал твой код отсюда, вставил в пустой проект, и все заработало...
Придется наверно завязывать с таким способом создания окон , нервы дороже :mad:
[/QUOTE]
Просто, одни начинали с чтения литературы и попыток вникнуть, а другие с множества поверхностных вопросов без всякого желания разобраться самим.
Ладно, не суть важно.
_nic, может, проще будет для начала изучить соотв. материал на firststeps.ru ?
PS:а на VC++ пусть сам БГ пишет :mad: :mad: :mad:
Это он такой тупой, а не те, кто не в состоянии документацию и пользоваться инструментом.
А самый классный инструмент программирования это даже не BC++, а бубен. Стучишь себе, шаманишь, ничего читать не надо, главное пляски по страшнее и костер по-больше. Доверься интелектуальности северных богов!
Буква "р" пропущена.
Bufer db 700 dup (?)
...
invoke FindResource,hInstance,100,RT_RCDATA
mov res,eax
invoke LoadResource,hInstance,res
mov ex,eax
вот на С++
Код:
HRSRC hResLoad;
HANDLE hExe;
HRSRC hRes;
HANDLE hUpdateRes;
char *lpResLock;
BOOL result;
hExe = LoadLibrary("hand.exe");
if (hExe == NULL) MessageBox(0, "Could not load exe.", "", MB_OK);
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL) MessageBox(0, "Could not locate resource.", "", MB_OK);
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL) MessageBox(0, "Could not load resource.", "", MB_OK);
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL) MessageBox(0, "Could not lock resource.", "", MB_OK);
}
HANDLE hExe;
HRSRC hRes;
HANDLE hUpdateRes;
char *lpResLock;
BOOL result;
hExe = LoadLibrary("hand.exe");
if (hExe == NULL) MessageBox(0, "Could not load exe.", "", MB_OK);
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL) MessageBox(0, "Could not locate resource.", "", MB_OK);
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL) MessageBox(0, "Could not load resource.", "", MB_OK);
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL) MessageBox(0, "Could not lock resource.", "", MB_OK);
}
На асме конечно все будет немного по другому. Главное чтобы твоих 700 байт в буфере хватило для ресурса, может быть переполнение и программа вылетит.
LoadResource В случае успеха ворвращает дескриптор глобальной памяти, содержащей данные связанные с ресурсом. она вазращает чило но как по нему всё загрузит в буфере я вот этого понять немагу.
LoadResource универсальна, а LoadAccelerators, LoadBitmap, LoadCursor и т.д являются ее частным случаем. Т.е в этом примере ресурс уже будет загружен в lpResLock. Так объясняется в MSDN.
Заранее спасибо
:-)))) половина функций недокументирована ;) На английском языке у меня