PDA

View Full Version : ارتباط بین دو Console Application



menevlster
یک شنبه 30 آبان 1389, 21:35 عصر
سلام
من دو Console Application به نامهای console1 و console2 ایجاد میکنم
سئوال: آیا امکان دارد با وارد کردن حرف در console1 به طور خودکار در console2 نیز این حرف نیز تایپ شود لطفا راهنمایی کنید.

Felony
یک شنبه 30 آبان 1389, 22:15 عصر
در مورد DDE تحقیق کنید .

menevlster
یک شنبه 30 آبان 1389, 22:38 عصر
سلام متشکر از جواب
سئوال دیگری داشتم اینکه در Windows Application از طریق CALLBACK WindowProcedure به message یا پیامهای Windows Application می توان دست یافت حال در Console Application به چه روشی می توان به این messageها نظیر scrolling یا تغییر اندازه Console Application و غیره دست یافت

Felony
یک شنبه 30 آبان 1389, 23:12 عصر
سئوال دیگری داشتم اینکه در Windows Application از طریق CALLBACK WindowProcedure به message یا پیامهای Windows Application می توان دست یافت
در Windows Application به وسیله Message Handler فرم برنامه میشه به این پیغام ها دسترسی داشت ، Callback Function ها توابعی هستند که در برنامه شما تعریف شده و به توابع API ویندوز به عنوان پارامتر ارجاع داده میشن و ویندوز اونها رو صدا میزنه ، مثلا توابع EnumWindows یا EnumPrinters و ربطی به دریافت پیغام های ویندوز ندارن .

در مورد سوالتون هم شاید بتویند با PeekMessage این کار رو در Console Application انجام بدید ، البته اگر پیغام ها مستقیما به خود برنامه شما برسه ( تا به حال تست نکردم ، الان دارم بررسی میکنم )

r00tkit
یک شنبه 30 آبان 1389, 23:30 عصر
در مورد DDE تحقیق کنید .

DDE(از بس با این DDK ور رفتم فکرکردم می گی DDK =>کلی سر کار رفتم ) از windows message استفاده می کنه پس در console app نمی شه

ولی شما می تونی از pipe (http://msdn.microsoft.com/en-us/library/aa365574%28VS.85%29.aspx#base.using_pipes_for_ipc) استفاده کنی (یه مثال زده بودم قبلا" سرچ کن )



در مورد سوالتون هم شاید بتویند با PeekMessage این کار رو در Console Application انجام بدید ، البته اگر پیغام ها مستقیما به خود برنامه شما برسه ( تا به حال تست نکردم ، الان دارم بررسی میکنم ) به console app ما هیچ پیغامی داده نمی شه که با PeekMessage برشداریم

چون در sendو post به{ Handle to the window whose window procedure is to receive
the message}

نیاز هستش

راستی این "اگه " رو برای چی گفتی:شیطان:

---------
خودم هم به مطالبم شک داشتم ولی سرچ زدم خلافش گیر نیومد اگه پیدا شد بگید (:

Felony
دوشنبه 01 آذر 1389, 00:07 صبح
خودم هم به مطالبم شک داشتم ولی سرچ زدم خلافش گیر نیومد اگه پیدا شد بگید (:
تو همون Console Application با AllocateHWND میتونید یک پنجره Non-Visual بسازید و پیغام ها رو تو اون دریافت و پردازش کنید .

r00tkit
دوشنبه 01 آذر 1389, 00:58 صبح
AllocateHWND مربوط به VCL هستس (این روش رو دیده بودم قبلا")

Adding Windows To Your Console Application (http://www.codeproject.com/KB/winsdk/winconsole.aspx)

Felony
دوشنبه 01 آذر 1389, 08:51 صبح
AllocateHWND مربوط به VCL هستس (این روش رو دیده بودم قبلا")

Adding Windows To Your Console Application (http://www.codeproject.com/KB/winsdk/winconsole.aspx)
بله برای VCL هست ولی خود AllocateHWND در پشت صحنه از CreateWindowEX (http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx)استفاده میکنه ، شما هم به راحتی میتونید خودتون یک پنجره بسازید و مخفیش کنید و با توجه به اینکه نام کلاس و عنوان پنجره رو دارید با FindWindow میتونید پیداش کنید و بهش پیغام بفرستید و ...

r00tkit
دوشنبه 01 آذر 1389, 12:42 عصر
بله برای VCL هست ولی خود AllocateHWND در پشت صحنه از CreateWindowEX (http://msdn.microsoft.com/en-us/library/ms632680%28VS.85%29.aspx)استفاده میکنه ، شما هم به راحتی میتونید خودتون یک پنجره بسازید و مخفیش کنید و با توجه به اینکه نام کلاس و عنوان پنجره رو دارید با FindWindow میتونید پیداش کنید و بهش پیغام بفرستید و ...

برادر من چرا اسرار داری یه کار که مخصوص windows app هستش رو برای console انجام بدی

شما می گی non-visual بعد می خوای از FindWindow استفاده کنی !!!!!!

اصلا" به لینکی که من دادم توجه نکردید!!:

Should the application be a GUI application or a console application? Some IPC mechanisms require a GUI application.
که این DDE نیاز داره
بعدش

Anonymous pipes provide an efficient way to redirect standard input or output to child processes on the same computer. Named pipes provide a simple programming interface for transferring data between two processes, whether they reside on the same computer or over a network. For more information, see Pipes (http://msdn.microsoft.com/en-us/library/aa365780%28v=VS.85%29.aspx).


------------------
sorry for harshy text

Felony
دوشنبه 01 آذر 1389, 12:54 عصر
برادر من چرا اسرار داری یه کار که مخصوص windows app هستش رو برای console انجام بدی

شما می گی non-visual بعد می خوای از FindWindow استفاده کنی !!!!!!

اصلا" به لینکی که من دادم توجه نکردید!!:
که این DDE نیاز داره
بعدش



------------------
sorry for harshy text
شما به گفته های من توجه نکردی !

توضیحات راهنمای خود دلفی درباره AllocateHWND :


Unit: Classes

Type: method

[edit] Description
Creates a window that implements a specified window procedure.




Call AllocateHWnd to create a window that is not associated with a windowed control. Typically, this method is used to create non-visual windows that respond to messages but that do not appear in the user interface. For example, the TTimer component uses this method to create a window that responds to timer messages from Windows.

The Method parameter specifies the window procedure that the generated window uses to respond to messages.

AllocateHWnd returns the handle of the newly created window.

Note: Use the DeallocateHWnd procedure to free windows that are created using AllocateHWnd.
فکر میکنم Non-Visual رو با چیز دیگه ای اشتباه گرفتی .

و برای اطمینان خاطر شما تو Stack Over Flow هم پرسیدم :
http://stackoverflow.com/questions/4240263/how-can-i-make-my-console-application-receive-window-messages

ok ؟

r00tkit
دوشنبه 01 آذر 1389, 13:33 عصر
شما چی رو به عنوان پارامتر دوم می خوای به FindWindow بفرستی تا handleلش رو گیر بیاری (منظور handle ان windowای هستش که createشده ولی show نشده)

راه حل شما برای propagate کردن هستش نه برای Send کردن به به یه windowخاص

پس برای ارتباط یه consoleبا console دیگه نیست

مگه اینکه یه customمسیج درست کنی بعد propagateکنی و به نحو احسنت استفاده کنی

حالا یه برنامه بنویس و راه حلت رو نمایش بده با c/C++‎‎ نه با دلفی

( لطفا" یه تابع رو که تو دلفی هستش رو اینجا روش بحث نکن برادر تاجیک)

Felony
دوشنبه 01 آذر 1389, 17:18 عصر
شما چی رو به عنوان پارامتر دوم می خوای به FindWindow بفرستی تا handleلش رو گیر بیاری (منظور handle ان windowای هستش که createشده ولی show نشده)

راه حل شما برای propagate کردن هستش نه برای Send کردن به به یه windowخاص

پس برای ارتباط یه consoleبا console دیگه نیست

مگه اینکه یه customمسیج درست کنی بعد propagateکنی و به نحو احسنت استفاده کنی
پارامتر دوم عنوان پنجره هست وقتی از منحصر به فرد بودن کلاس مطمئن هستی میتونی پوچ ارسالش کنی :


FindWindow('ConsoleAPP', nil);

رجیستر کردن یه پیغام دلخواه هم کار سختی نیست که اینقدر پیچیدش میکنی ، در کل راه حل جواب میده !


حالا یه برنامه بنویس و راه حلت رو نمایش بده با c/C++‎‎‎‎‎‎ نه با دلفی

( لطفا" یه تابع رو که تو دلفی هستش رو اینجا روش بحث نکن برادر تاجیک)
این بچه بازیا چیه ؟ نمیدونم تو این بخش بحث فنی میشه یا کلا همه جاش کل کله !

من تخصصی تو C و ++C ندارم و بیکار هم نیستم وقت بزارم و کد ++C بنویسم تا یکی بخواد روش رو قبول کنه ؛ یه راه حل ارائه دادم ، براش دلیل و سند آوردم ( Help دلفی و SOF ) که به راحتی عملی هست و جای بحث و کل کل هم نمیبینم ، کد دلفی خواستید در خدمتم .

در ضمن در مورد تابعی از دلفی بحث نشد ، اون نقل قولی که از راهنمای دلفی بود در جواب حرف خودتون بود :


شما می گی non-visual بعد می خوای از FindWindow استفاده کنی !!!!!!

و اون تابع AllocateHWND هم که گفتم از CreateWindowEX استفاده میکنه که API هست و میشه تو ++C هم ازش استفاده کرد و همون تابع رو پیاده سازی کرد .

با توجه به مستنداتی که ارائه دادم و بحث های قبلی بحث فنی این تاپیک تموم شده هست ، من هم دیگه تو این تاپیک کاری ندارم ، موفق باشید .

r00tkit
دوشنبه 01 آذر 1389, 17:56 عصر
برادر من دوست من کل کل چیه دیگه

ما داریم اینجا بحث علمی می کنیم و از همدیگه چیز یاد می گیریم، اقا مجتبی چرا ناراحت می شی ما که با هم دوست بودیم :)

FindWindow برای پیدا کردن handle یه window ای استفاده می شه که show شده باشه

ببین موضوع از کجا به کجا رسید

Felony
دوشنبه 01 آذر 1389, 18:07 عصر
برادر من دوست من کل کل چیه دیگه

ما داریم اینجا بحث علمی می کنیم و از همدیگه چیز یاد می گیریم، اقا مجتبی چرا ناراحت می شی ما که با هم دوست بودیم :)
:گیج: اخوی مگه الان دشمنیم ؟!
فقط گفتم با اون جور صحبت کردن هر کسی باشه همین برداشت رو میکنه .


FindWindow برای پیدا کردن handle یه window ای استفاده می شه که show شده باشه
نه ، فقط کافیه اون Window ساخته شده باشه ، لزومی به Show بودنش نیست .

r00tkit
دوشنبه 01 آذر 1389, 18:48 عصر
، من هم دیگه تو این تاپیک کاری ندارم ، موفق باشید . :گیج:


، من هم دیگه تو این تاپیک کاری ندارم ، موفق باشید . خوب این کد رو من نوشتم

#include<Windows.h>
#include<iostream>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#include<conio.h>;
int main()
{

HWND hWnd = CreateWindow("SysListView32","Geek",0, 0, 0, 0, 0,NULL, NULL, (HINSTANCE)GetCurrentProcess(), NULL);
getch();

}

هر چند مط‌مئن‌ بودم ولی یه بار دیگه امتحان کردم findwindow کار نمی کنه و نباید کار کنه
حتی از Spy++ هم استفاده کردم (" فقط class مربوط به CMD رو نشون می ده نه چیز دیگه)

اخه من نمی دونم چه استدلالی هستش برای حرف شما """ فقط کافیه اون Window ساخته شده باشه ، نیازی به Show بودنش نیست ."""""

چون تو stackoverflow گفتن؟

حالا همین کد رو اجرا کن بعد با دلفی (یا هر چی از ocaml تا erlang)امتحان کن !! ببین handle رو پیدا می کنه

Felony
دوشنبه 01 آذر 1389, 19:18 عصر
هر چند مط‌مئن‌ بودم ولی یه بار دیگه امتحان کردم findwindow کار نمی کنه و نباید کار کنه
حتی از Spy++ هم استفاده کردم (" فقط class مربوط به CMD رو نشون می ده نه چیز دیگه)
باید هم اونو نشون بده ، شما پنجره رو ساختی ولی نمایشش ندادی ، اون کنسول هم که میبینی فقط یه رابط بصری برای برنامه شما هست و عملا همون CMD هست ، چه توقع دیگه ای دارید ؟!


اخه من نمی دونم چه استدلالی هستش برای حرف شما """ فقط کافیه اون Window ساخته شده باشه ، نیازی به Show بودنش نیست ."""""

چون تو stackoverflow گفتن؟
من رو حساب اطلاعات خودم حرف میزنم نه SOF ، من همون اول خودم تست کردم و مشکلی هم نداشت و برای اطمینان خاطر شما اون سوال رو اونجا پرسیدم .

کد خودتون رو برای پیدا کردن هندل پنجره ساخته شده کامل کردم ، حالا چه پنجره نمایش داده بشه چه نشه هندل پیدا میشه :
#include<Windows.h>
#include<iostream>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#include<conio.h>;
int main()
{
CreateWindow("SysListView32","Geek",0, 0, 0, 0, 0,NULL, NULL, (HINSTANCE)GetCurrentProcess(), NULL);
HWND H = FindWindow("SysListView32", "Geek");
cout<< "The handle of created window is : " <<H;
ShowWindow(H, 1);
getch();
}

این هم کد دلفی که هندل پنجره ای که تو برنامه کنسول در ++C ساختید و مخفی هم هست رو پیدا میکنه :
ShowMessage(FloatToStr(FindWindow('SysListView32', 'Geek')));

اگر قرار بود کار نکنه که نمیشد ، مثلا تابع ShowWindow میخواست چه طور یه پنجره که قبلا مخفی شده رو به وسیله هندلش نمایش بده ؟!

r00tkit
دوشنبه 01 آذر 1389, 20:16 عصر
مرسی ،خیلی جالبه نه spy++ نه findwindow با چند بار بررسی نشون نمی داد ولی حالا تو این کد شما (که خودم نوشته بودم) نشون می ده احتمالا" مشکلی تو جایی بود یا شایدم قوانین مرفی می خواست خود نمائی کنه کی چی می دونه!!

------
حیف یه دو ساعتی وقتم رو این windowing گرفت

sh4mid
سه شنبه 02 آذر 1389, 06:23 صبح
سلام

سئوال دیگری داشتم اینکه در Windows Application از طریق CALLBACK WindowProcedure به message یا پیامهای Windows Application می توان دست یافت حال در Console Application به چه روشی می توان به این messageها نظیر scrolling یا تغییر اندازهConsole Application و غیره دست یافت


تو همون Console Application با AllocateHWND میتونید یک پنجره Non-Visual بسازید و پیغام ها رو تو اون دریافت و پردازش کنید .

فکر کنم دو تا موضوع بالا مجزا از هم باشند :متفکر: تو اولی میخواهیم به Message های Console دسترسی داشته باشیم تو دومی میخواهیم به Console پیغام بفرستیم.
آقای تاجیک و جناب geek1982 بر فرض ما اون پنجره رو هم ساختیم (تو محیط Console) اگر پیغامی هم فرستاده بشه یا پردازش بشه مال اون پنجره هست و ربطی به Console نداره ، اگر بحث فقط گفتگو باشه فکر کنم بشه با Interprocess Communications (http://msdn.microsoft.com/en-us/library/aa365574(VS.85).aspx) سرو ته قضیه رو هم آورد (خودمونیم ها IPC تو Linux راحت تر نیست؟:متفکر:)
البته یک روش راحتتر هم هست :لبخند: فرض کنید دو تا فایل اجرایی به اسم Proc_A و Proc_B داشته باشیم

Proc_A.c
#include <windows.h>
#include <stdio.h>

int main()

{

STARTUPINFO si = { sizeof(si) };

PROCESS_INFORMATION pi;

char buf[4444];
LPCTSTR szExe= "c:\\Proc_B.exe";

*(DWORD *)buf = 0;

lstrcpy(buf+sizeof(DWORD), "Hello from Process A!");

si.lpReserved2 = (LPBYTE)buf;

si.cbReserved2 = sizeof(buf);

if(CreateProcess(szExe,0, 0, 0, 0, 0, 0, 0, &si, &pi))

{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;

}


Proc_B

#include <windows.h>
#include <stdio.h>

int main()

{

STARTUPINFO si = { sizeof(si) };

GetStartupInfo(&si);

if(si.lpReserved2 != NULL)

MessageBox(NULL,LPCSTR(si.lpReserved2 + sizeof(DWORD)), "Process B", MB_OK);

return 0;
}

فایل Proc_B.exe رو تو درایو C کپی کنید و Proc_A رو اجرا کنید :قهقهه::قهقهه::قهقهه:

اما در مورد گرفتن پیام های Console
یک روش استفاده از SetConsoleCtrlHandler هست

#include <windows.h>
#include <stdio.h>

BOOL CtrlHandler( DWORD fdwCtrlType )
{
switch( fdwCtrlType )
{
// Handle the CTRL-C signal.
case CTRL_C_EVENT:
printf( "Ctrl-C event\n\n" );
Beep( 750, 300 );
return( TRUE );

// CTRL-CLOSE: confirm that the user wants to exit.
case CTRL_CLOSE_EVENT:
Beep( 600, 200 );
printf( "Ctrl-Close event\n\n" );
return( TRUE );

// Pass other signals to the next handler.
case CTRL_BREAK_EVENT:
Beep( 900, 200 );
printf( "Ctrl-Break event\n\n" );
return FALSE;

case CTRL_LOGOFF_EVENT:
Beep( 1000, 200 );
printf( "Ctrl-Logoff event\n\n" );
return FALSE;

case CTRL_SHUTDOWN_EVENT:
Beep( 750, 500 );
printf( "Ctrl-Shutdown event\n\n" );
return FALSE;

default:
return FALSE;
}
}

void main( void )
{
if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) )
{
printf( "\nThe Control Handler is installed.\n" );
printf( "\n -- Now try pressing Ctrl+C or Ctrl+Break, or" );
printf( "\n try logging off or closing the console...\n" );
printf( "\n(...waiting in a loop for events...)\n\n" );

while( 1 ){ }
}
else
printf( "\nERROR: Could not set control handler");
}


که میشه باهاش 5 تا پیام رو چک کرد.
مشکل Console اینه که نمیشه مثل Windows باهاش برخورد کرد ، یک مثال ساده :یک پنجره Command Prompt رو باز کنید بعد سعی کنید با spy++ پیغام هاش رو Capture کنید ، پیغام میده




The specified window cannot be spied upon. Windows will not allow access to the message stream for this window


که اینم انگار به خاطر اینه که از Windows NT 4.0 به بعد csrss.exe یا همون Client/Server Runtime Subsystem مسئول اصلی Win32 Console هست(اینجا (http://en.wikipedia.org/wiki/Client/Server_Runtime_Subsystem))

یک روش هم با WinEvent ها ست که میشه باهاش پیغام های زیر رو بررسی کرد

EVENT_CONSOLE_CARET
Provides notification when the caret within the console changes position.

EVENT_CONSOLE_UPDATE_REGION
Provides information on when a section of text is updated within the console.

EVENT_CONSOLE_UPDATE_SIMPLE
Notifies aids of when a single character has been changed in the buffer.

EVENT_CONSOLE_UPDATE_SCROLL
Notifies aids when the console has been scrolled.

EVENT_CONSOLE_LAYOUT
Notifies aids that the console's layout has changed. The console's layout changes from window to full-screen.

EVENT_CONSOLE_START_APPLICATION
Triggered when a new console process has started.

EVENT_CONSOLE_END_APPLICATION
Triggered when a console process is terminated.

توضیح QNote.exe چیز خاصی نیست کدش اینه

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
cout<<"Type Q 4 Quit"<<endl;
while(true)
{
char ch=cin.get();
if(ch=='q' || ch=='Q') break;
}
return 0;
}


در ضمن وقتی Hook رو زدید تو صفحه اول پیغام میده شما تو صفحه دوم type کنید و نتیجه رو ببیند:لبخند:

پ.ن 1: ممنونم از menevlster عزیز که همچین سوالی رو مطرح کرد ، 2 روز علافش بودم ولی خیلی چیز یاد گرفتم(کاش تمام سوالات اینجوری بود :لبخند::لبخند:)

پ.ن 2: ممنونم از آقای تاجیک و جناب geek1982 که این topic رو ادامه دادن و نگذاشتن بره تو صفحات nام این انجمن

پ.ن 3:اگر روش دیگری هم بود ادامه اینجا مینویسم

Felony
سه شنبه 02 آذر 1389, 07:10 صبح
آقای تاجیک و جناب geek1982 بر فرض ما اون پنجره رو هم ساختیم (تو محیط Console) اگر پیغامی هم فرستاده بشه یا پردازش بشه مال اون پنجره هست و ربطی به Console نداره ، اگر بحث فقط گفتگو باشه فکر کنم بشه با Interprocess Communications سرو ته قضیه رو هم آورد (خودمونیم ها IPC تو Linux راحت تر نیست؟)
1- صاحب اون پنجره برنامه کنسول شماست .
2- کدهای شما تو برنامه کنسول اون پنجره رو ایجاد کرده .
3- این روشی هست که خیلی جاها ازش استفاده میشه ، مثلا شئ Timer دلفی یه پنجره به همین شکل میسازه و ازش به عنوان یک Message Handler برای پیغام WM_Timer استفاده میکنه و این پیغام رو دریافت و پردازش میکنه .

در هر صورت اون پنجره متعلق به پروسه برنامه کنسول شماست و میتونید ازش به عنوان یک Message Handler به صورت مخفی استفاده کنید و بهش پیغام بفرستید و تو برنامه کنسولتون پیغام ها رو دریافت و پردازش کنید و مشکلی هم نخواهید داشت .

sh4mid
سه شنبه 02 آذر 1389, 07:50 صبح
سلام
من Delphi بلد نیستم ، اون تابعی هم که معرفی کرده بودید رو نمی دونستم چی هست(البته حالا فهمیدم)
یک سوال دارم: با این روشی که شما گفتید میشود پیغامهای خود پنجره Console رو بررسی کرد، یعنی خود پنجره Console بفهمد که scroll شده یا مثلا صفحه اش Update شده؟(بعید می دونم چون این کار csrss.exe هست)
ببینید من نگفتم روش شما اشتباهه، می گم برای بررسی پیام های خود پنجره Console باید از اون روشهای بالا استفاده کرد

Felony
سه شنبه 02 آذر 1389, 08:16 صبح
یک سوال دارم: با این روشی که شما گفتید میشود پیغامهای خود پنجره Console رو بررسی کرد، یعنی خود پنجره Console بفهمد که scroll شده یا مثلا صفحه اش Update شده؟(بعید می دونم چون این کار csrss.exe هست)
نه نمیشه ، پیغام ها کنسول به خودش میرسه ربطی به پنجره ای که ما ساختیم نداره ، اون پنجره رو ساختیم تا براش یک Message Handler بسازیم و پیغام های رسیده به اون پنجره رو برای خودمون تو برنامه پردازش کنیم و به نوعی بین دو برنامه کنسول ارتباط برقرار کنیم .


ببینید من نگفتم روش شما اشتباهه، می گم برای بررسی پیام های خود پنجره Console باید از اون روشهای بالا استفاده کرد


آقای تاجیک و جناب geek1982 بر فرض ما اون پنجره رو هم ساختیم (تو محیط Console) اگر پیغامی هم فرستاده بشه یا پردازش بشه مال اون پنجره هست و ربطی به Console نداره
جواب هایی که داده میشه بر اساس سوال کاربر هست ، ایشون خواستن بین 2 برنامه کنسول ارتباط بر قرار کنن نه اینکه پیغام هایی مثل اسکرول شدن پنجره کنسول رو بررسی کنن ؛ اون روشی هم که من یا geek1982 ارائه داد بر همین اساس بود .

sh4mid
سه شنبه 02 آذر 1389, 08:32 صبح
والا من هم براساس پست شماره 3 همین topic اون روش رو گفتم:لبخند:


سلام متشکر از جواب
سئوال دیگری داشتم اینکه در Windows Application از طریق CALLBACK WindowProcedure به message یا پیامهای Windows Application می توان دست یافت حال در Console Application به چه روشی می توان به این messageها نظیر scrolling یا تغییر اندازه Console Application و غیره دست یافت

Felony
سه شنبه 02 آذر 1389, 08:46 صبح
والا من هم براساس پست شماره 3 همین topic اون روش رو گفتم:لبخند:

بله جواب شما مرتبط با سوال دوم بود ، جواب ما هم مرتبط با سوال اول ، کلا تاپیک جامعی برای آیندگان شد .

r00tkit
سه شنبه 02 آذر 1389, 09:54 صبح
کلا" دو دسته پیام داریم


پیام هایی که به CMD ارسال می شه (مثل جابجایی خود CMD و....
پیام هایی که به Windowای که ما درست کردیم ارسال می شه(با همون createwindow)

حالا اگه چیزی تو صفحه چاپ می شه برای چاپش پیامی ارسال می شه ؟ به چی این پیام ارسال می شه؟

در مورد Console Control Handlers چی؟( اینها هم زیر مجموعهی پیام های متنی هستن؟)

وقتی برنامه رو مستقل( از explorerنه CMD ) اجراش می کنیم py++ ان پیغام رو نمی ده و می تونن انو HOOK کنه

اینجا امده console رو hook کرده (http://www.progamercity.net/code-tut/hook-console-non-engine-t797.html)

------------------
من نمی دونم چرا اینهمه خودمون رو می چرخونیم و برای ارسال خروجی یه console به consoleدیگه بر طبق مثال و تاکید microsoft از Pipe استفاده نمی کنیم

(http://www.progamercity.net/code-tut/hook-console-non-engine-t797.html)