ايران ويج

نسخه‌ی کامل: غیر فعال کردن Desktop Composition در Win7 توسط توابع API
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان عزیز .

لطفا تکه کد زیر رو به کد های دلفی تبدیل کنید :

کد:
Private Const DWM_EC_DISABLECOMPOSITION As Long = 0
Private Const DWM_EC_ENABLECOMPOSITION As Long = 1
  
Private Declare Function DwmEnableComposition Lib "dwmapi" (uCompositionAction As Long) As Long

  
  
Private Sub Form_Load()

   Dim strCMD() As String
  
  
   strCMD = Split(Command$, "|")
  
   If strCMD(0) <> "Hello" Then End

    
   If strCMD(1) = "0" Then
     DwmEnableComposition (DWM_EC_DISABLECOMPOSITION)
   Else
     DwmEnableComposition (DWM_EC_ENABLECOMPOSITION)
   End If
  
End Sub

هر کجای کد نیاز به توضیح داشت بفرمایید که توضیح بدم .

با تشکر . Wink
بیا دوست عزیز.
کد:
1.Open/close CD ROM
Uses mmsystem;
mciSendString('Set cdaudio door open wait', nil, 0, handle); to open
mciSendString('Set cdaudio door closed wait', nil, 0, handle); to close

2.Monitor stand by
Uses Shellapi;
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 0) ;

3.Hide/show application on task bar
Uses Shellapi;
ShowWindow(application.handle, SW_hide);  to hide
ShowWindow(application.handle, SW_restore); to show

4.Hide/show application on task list (task display when you press Ctrl+Alt+Del)
implementation
Function RegisterServiceProcess(idProcess,dwType : Integer):Integer; stdcall; external 'KERNEL32.Dll';
...........
on your event handler
RegisterServiceProcess(GetCurrentProcessID, 0); to show
RegisterServiceProcess(GetCurrentProcessID, 1); to hide

5.Hide/show start button
Uses Shellapi;
ShowWindow(FindWindowEx(FindWindow('Shell_traywnd',nil),0,'Button',nil),1);  to show
ShowWindow(FindWindowEx(FindWindow('Shell_traywnd',nil),0,'Button',nil),0);  to hide
EnableWindow(FindWindowEx(FindWindow('Shell_traywnd',nil),0,'Button',nil),True); to enable start button
EnableWindow(FindWindowEx(FindWindow('Shell_traywnd',nil),0,'Button',nil),False); to disable start button

6.Hide/show task bar
Uses Shellapi;
ShowWindow(FindWindow('shell_traywnd',nil),1); to show
ShowWindow(FindWindow('shell_traywnd',nil),0); to hide
EnableWindow(FindWindow('shell_traywnd',nil),True); enable task bar
EnableWindow(FindWindow('shell_traywnd',nil),False); disable task bar

7.Hide/show desktop
Uses Shellapi;
ShowWindow(FindWindow('progman',nil),1); to show
ShowWindow(FindWindow('progman',nil),0); to hide
EnableWindow(FindWindow('progman',nil),True); to enable desktop
EnableWindow(FindWindow('progman',nil),False); to disable desktop

8.Hide/show clock
Uses Shellapi;
ShowWindow(FindWindowEx(FindWindowEx(FindWindow('shell_traywnd',nil),0,'TrayNotifyWnd',nil),0,'TrayClockWClass',nil),1); to show
ShowWindow(FindWindowEx(FindWindowEx(FindWindow('shell_traywnd',nil),0,'TrayNotifyWnd',nil),0,'TrayClockWClass',nil),0); to hide

9.Shutdown/restart windows
Uses Shellapi;
ExitWindowsEx(ewx_Shutdown,0); to shutdown
ExitWindowsEx(ewx_Reboot,0); to restart
ExitWindowsEx(ewx_Poweroff,0); to off your computer power
سلام .
The.Ghost عزیز فکر کنم پست من رو درست نخوندید .
من که در کد های شما هیچ اثری از آنچه خواستم ندیدم .
آره من فکر کردم می خواهی Desktop را غیر فعال کنی. WhistleWhistle
SadSadConfusedConfusedWhistleConfusedSadAmazeConfusedWhistleWhistleWhistle
اینم کدش البته تو ویندوز سون 32 &64 تست شدس

کد:
procedure SetAero(CompositionAction: Integer);
var
  DWMlibrary: THandle;
  DwmEnableComposition: function(CompositionAction: Integer): Integer;
stdcall;
begin
  DWMlibrary := LoadLibrary('DWMAPI.dll');
  if DWMlibrary <> 0 then
  begin
    @DwmEnableComposition := GetProcAddress
(DWMLibrary,'DwmEnableComposition');
    if @DwmEnableComposition <> nil then
      DwmEnableComposition (CompositionAction);
  end;
end;
سلام مبین جان .
تست کردم ، جواب نمیدهShy
[تصویر:  attachment.php?aid=7246]
این کد چرا کار نمی کنه؟
دوستان بی زحمت یه تستی کنید کد رو
این توضیحات MSDN هست

کد:
Applies to: desktop apps only

Enables or disables Desktop Window Manager (DWM) composition.

Note  This function is deprecated as of Windows 8 Consumer Preview. DWM can no longer be programmatically disabled.
خود Delphi xe2 یونیت و تابعش رو داره
و به صورت زیر ازش استفاده کردم هم برای فعال هم غیر فعال کردن در ویندوز سون یک لحضه صفحه سیاه شد و به حالت اول برگشت(البته نمیدونم این تابع چه کاری باید انجام بده)

کد:
uses
dwmapi;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
end;
دستت درد نکنه مبین جان .

نقل قول: (البته نمیدونم این تابع چه کاری باید انجام بده)
خودمونیش میشه غیر فعال کردن تم Aero .

برای اینکه بهتر متوجه بشی ، از تب Compatibility پراپرتیس یه فایل EXE ، چک باکس Disable Desktop Composition رو فعال کن و بعد فایل رو اجرا کن .
[تصویر:  attachment.php?aid=7252]

جالبه که این API تو VB6 جواب نمیدهAmaze
البته من یه تابع یپدا کردم برای چک کردن فعال یا غیر فعال بودن

DwmIsCompositionEnabled

من کد زیر رو رو سیستم خودم اجرا کردم به درستی اعمال شد

کد:
uses
dwmapi;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
b:LongBool;
begin
DwmIsCompositionEnabled(b) ;
if b then
caption:='true'
else
caption:='false';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
end;
البته این کد اعمال به همه برنامه ها رو فعال یا غیر فعال میکنه
(من از Delphi xe2 استفاده میکنم)خودش یونیتشو داره
سلام .
اینم معادلش در VB :

کد:
Private Declare Function DwmIsCompositionEnabled Lib "dwmapi.dll" (ByRef nEnabled As Long) As Long


Function IsAeroEnabled() As Boolean

    Dim blnResult As Boolean
    Dim IntRef As Long
    
    Call DwmIsCompositionEnabled(IntRef)
    If IntRef Then
        blnResult = True
    Else
        blnResult = False
    End If

    IsAeroEnabled = blnResult

End Function