Q&A

  • 열려진 windows를 찾고자 할 경우
안녕하세요 고수님들....

항상 이 사이트를 열때마다 많은 호기심과 많은 도움이 됩니다.

다름이 아니라 ...

현재 원도우가 부팅시 수많은 프로그램들이 열려진 것을 알수가 있습니다.

그런데 델파이에서는 이미 열려진 프로그램들의 리스트를 볼수있는 방법이 있는지요..

그리고 열려진 파일들 중에 원하는 프로그램들을 강제로 종료 할수 있는지요..

제가 얼뜻 본 것같기도 한데 .....

아시는 분은 가르쳐주세요....

고수님들의 조언을 부탁합니다......

그리고 제가 초보라 용어에 대해서는 잘모릅니다.

아주 상세히 좀 가르쳐주세요....



1  COMMENTS
  • Profile
    아이언 2000.12.15 01:57
    뭐.. 자세히 설명은 못 드리겠구요..

    제가.. 여기 저기 지나다니면서 얻은 팁입니다..

    물론 제가 작성한 것은 아니구요..저도 이 팁에서 힌트를 얻고 작업했습니다.

    소스니까. 한번 보세요..



    그리고 실행된 프로그램은 아래 소스에서 얻은 핸들로 다음과 같이 하시면 됩니다.



    SendMessage( Handle, WM_SYSCOMMAND, SC_CLOSE, 0 );





    도움이 되셨으면 좋겠네요..

    ----------------------------------------------------------------------------------

    // Button1을 클릭하면 현재 실행중인 Application의 리스트를 ListBox1에 구한다

    // LibtBox1에서 특정 프로그램을 클릭하면 Label1에 그 프로그램의 정보를 보여준다

    // Button2를 클릭하면 이 프로그램을 제외한 나머지 프로그램들을 Minimized 시킨다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Label1: TLabel;

    ListBox1: TListBox;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure ListBox1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    function EnumWindowsProc(Wnd: HWND; lb: TListbox): BOOL; stdcall;

    var

    caption: Array [0..128] of Char;

    begin

    Result := True;

    if {skip invisible windows}

    IsWindowVisible(Wnd) and

    {only process truly top-level windows. GetWindowLong must be used, not GetParent}

    ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or

    (HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) and

    {skip WS_EX_TOOLWINDOW windows}

    ((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0) then

    begin

    SendMessage(Wnd, WM_GETTEXT, Sizeof(caption), integer(@caption));

    lb.Items.AddObject(caption, TObject(Wnd));

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    ListBox1.Clear;

    EnumWindows(@EnumWindowsProc, Integer(ListBox1));

    end;



    procedure TForm1.ListBox1Click(Sender: TObject);

    var

    theClassname: array [0..128] of Char;

    Wnd: HWND;

    tid, pid: DWORD;

    begin

    with Sender as TListbox do

    begin

    if ItemIndex >= 0 then

    begin

    Wnd := HWND(Items.Objects[itemindex]);

    if Wnd <> 0 then

    begin

    Windows.GetClassname(Wnd, theClassname, Sizeof(classname));

    tid := GetWindowThreadProcessID(Wnd, @pid );

    label1.caption :=

    Format(

    'HWND: %8.8x'#13#10+

    'Class: %s'#13#10+

    'Process ID: %8.8x'#13#10+

    'Thread ID: %8.8x',

    [Wnd, theClassname, pid, tid] );

    end;

    end;

    end;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    i: Integer;

    Wnd: HWND;

    begin

    for i := 0 to ListBox1.Items.Count-1 do

    begin

    Wnd := HWND(ListBox1.Items.Objects[i]);

    // 이 프로그램이 아니고 minimized(iconic)가 아니면...

    if (Wnd <> 0) and (Wnd <> Application.Handle) then

    if not IsIconic(Wnd) then

    begin

    ShowWindow(Wnd, SW_HIDE);

    ShowWindow(Wnd, SW_MINIMIZE);

    end;

    end;

    end;



    end.

    ----------------------------------------------------------------------------------





    지승현 wrote:

    > 안녕하세요 고수님들....

    > 항상 이 사이트를 열때마다 많은 호기심과 많은 도움이 됩니다.

    > 다름이 아니라 ...

    > 현재 원도우가 부팅시 수많은 프로그램들이 열려진 것을 알수가 있습니다.

    > 그런데 델파이에서는 이미 열려진 프로그램들의 리스트를 볼수있는 방법이 있는지요..

    > 그리고 열려진 파일들 중에 원하는 프로그램들을 강제로 종료 할수 있는지요..

    > 제가 얼뜻 본 것같기도 한데 .....

    > 아시는 분은 가르쳐주세요....

    > 고수님들의 조언을 부탁합니다......

    > 그리고 제가 초보라 용어에 대해서는 잘모릅니다.

    > 아주 상세히 좀 가르쳐주세요....

    >

    • 주경래
    • 2000.12.13 06:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 칠라기
      2001.01.11 22:40
      아래와 같이 하면 됩니다. VAR hTaskBar : integer; BEGIN hTaskBar := FindWindow('Shell_TrayWnd',...
    • cha
    • 2000.12.13 05:29
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 까마귀
      2000.12.13 19:05
      cha wrote: > 밖에는 눈발이 날리구 있슴다...^^ > 포커스에 관한 문제인데여... > dbgrid1,dbgrid2,dbg...
    • 액션가묜
      2000.12.13 05:43
      cha wrote: > 밖에는 눈발이 날리구 있슴다...^^ > 포커스에 관한 문제인데여... > dbgrid1,dbgrid2,dbg...
    • 타락천사
      2000.12.13 22:46
      안녕하세여..타락임다..^^ TSession 만 추가해두 원하시는 대루 되지 않을까여? 그래서 안되면.. ...
    • 김종언
      2000.12.13 19:40
      한군데서 접속하면.. 다른곳에서 접속할수 없게... Lock을 걸어여... 이성호 wrote: > 안녕...
    • srookie
      2000.12.13 07:36
      임하나 wrote: > 두 응용프로그램 사이의 정보를 전달 할 수 있는 방법이 있나여 ? > text나 registry말...
    • 윤돌
    • 2000.12.13 03:16
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김종언
      2000.12.13 19:39
      쩝..... 이런 간단한걸 질문하시다니.... HTML 확인하세요.... 거기에 적힌거 지우면 되니깐... 폼...
    • TriCLove
      2000.12.13 19:35
      아래에 나오는 메세지는 html 코드로 만들어지는 것 입니다. ActiveForm을 띄우는 html에서 아래 메세지 ...
    • 윤돌
      2000.12.13 20:16
      제질문은 그게 아니라요... 그 처음부터 HTML생성시 그 문장자체가 안만들어지게 안되냐? 는건데요... 쩝...
    • TriCLove
      2000.12.13 20:26
      제가 알기로는 없습니다. 하지만 자동으로 생성되는 html파일을 그냥 사용하는 일은 없을텐데요. 대개 사...
    • srookie
      2000.12.13 07:32
      곽성현 wrote: > 안녕하세요 > > 델파이에서 함수 사용시 > 결과값을 여러개 받을 수 있는 방법좀 갈...
    • kiwi
      2000.12.13 03:04
      곽성현 wrote: > 안녕하세요 > > 델파이에서 함수 사용시 > 결과값을 여러개 받을 수 있는 방법좀 갈...
    • 김성진
    • 2000.12.13 02:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • linuxwiz
      2000.12.13 02:55
      델파이가 .dcu파일을 찾고 있는 거거든여... 경로에 없는 곳에 .dcu가 있어서리 그렇져 해결 방법은 ...
    • 각시탈
    • 2000.12.13 01:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.12.13 03:01
      자료실에 가보심 FFT 컴퍼넌트가 있습니다. FFT로 검색해보세요. 그게 님께서 원하는 작업을 하는 컴퍼넌...
    • 남주희
    • 2000.12.13 01:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 까마귀
      2000.12.13 18:42
      안녕하세요. 까마귀입니다. 어떤 DB를 어떻게 사용하고 있는지를 잘 모르겠는데요. 아마 이걸 알려주셨...
    • 남주희
      2000.12.13 20:41
      부족한 질문에 대한 답변 감사합니다. 일단 문제는 해결을 했습니다(만 하루를 꼬박 허비하고....) 코...
    • 최은석
      2000.12.13 01:06
      다음은 브라우저를 실행해서 주어진 URL을 찾아가게 하는 프로시저입니다. uses .., ComObj; va...
    • 꼬마악마
      2000.12.13 01:49
      너무 감사합니다.. 그러나.. 제가 원한건.. 흑흑흑.. ..바탕화면에 인터넷 바로가기를 만드는 건...
    • 최은석
      2000.12.13 02:20
      바탕화면에 바로가기 만들기 { 예제: CreateShortcut('c:winntsystem32notepad.exe', _DESKTOP); } ...
    • 꼬마악마
      2000.12.13 02:25
      최은석 wrote: > 바탕화면에 바로가기 만들기 > { 예제: CreateShortcut('c:winntsystem32notepad.ex...
    • 안나
    • 2000.12.13 00:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 지승현
    • 2000.12.13 00:05
    • 1 COMMENTS
    • /
    • 2 LIKES
    • 아이언
      2000.12.15 01:57
      뭐.. 자세히 설명은 못 드리겠구요.. 제가.. 여기 저기 지나다니면서 얻은 팁입니다.. 물론 제가 작성한 ...
    • 2000.12.12 23:36
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 2000.12.13 00:49
      먼저 트리뷰에는 팝업메뉴라는 프로퍼티가 있고 거기에 팝업메뉴컴포넌트 걸어주면 별 짓 안해주면 오른쪽...
    • 초보여요.
      2000.12.13 05:01
      알려주신대로 마우스다운 이벤트의 오른쪽 마우스 선택시 처리하였습니다.. 마우스다운 이벤트에 TMouse...
    • 배움이
    • 2000.12.12 23:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김종언
      2000.12.12 23:34
      아직 안나왔습니다...... 배움이 wrote: > 델파이로 리눅스용 어플을 개발해야 되는 상황입니다. > ...