로그를 보니 이글에 대한 검색이 많더군요.
그래서 기존의 VB(비베)에 C++ 관련 정보도 추가해보았습니다.

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

오늘 이것때문에 시간을 너무 많이 소비하였다.
사실 알고보면 이것때문에 오히려 개발시간이 단축된건 사실이다.
인터넷 요기조기를 돌아보고 삽질을 한결과 알아낸 사실 몇가지를 기록하겠습니다.

일단 findwindow 가 머냐면...
여러가지 용도로 쓰겠지만
제가 사용한 목적은 특정 프로그램이 실행중인가를 알아내기 위해서입니다.
가령 B 라는 프로그램이 실행중인지 아닌지 A라는 프로그램이 알아내기 위해서입니다.
이것또한 자세히 들어가보면 저는 한프로그램에서 (VB) shell 명령어로
두 프로그램을 실행시키는데 순차적으로 실행이 되어야됩니다.

나중에 해당기능이 완성되면 별도의 글로 정리를 하겠지만
카트라이더 처럼 런처를 만들려고 합니다.
일단 프로그램이 설치되어있는가 확인후 만일 없거나 버젼이 다른경우
설치프로그램을 다운로드하고 설치를 한후에
프로그램을 실행시키는 방식입니다.

서론이 넘길었군요.
머 아는것도 별로 없는게 말만 많았습니다.

일단 vb에서 findwindow를 사용하기 위해서는 API를 선언해야합니다.



Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

그리고 해당 프로그램의 class 명이나 caption 값을 알아야하는데
어떻게 하느냐면. caption는 의외로 간단합니다.
프로그램을 실행시키면 가장상단에 있는것 있죠?
브라우져를 예로 들면 <title>...</title> 부분입니다.
그런데 class 명을 알고 싶거나 caption 값이 이상하게 안된다? 하면
C++ 를 깔면 같이 깔리는 spy++ 이라는 프로그램을 실행시킨후에
Ctrl + F 를 누른후 + 라로 마치 과녁같이 생긴것을 해당프로그램에
드래그 드롭을 하면 관련정보가 주르륵 나옵니다.

여기서....

제가 가장 시간을 잡아먹은 부분입니다.

Dim lngHwnd As Long '프로세스 확인

Private Sub Form_load()
  lngHwnd = FindWindow(vbNullString, "Sample App")
  'MsgBox lngHwnd
  If lngHwnd = 0 Then
  Timer1.Enabled = False
  executeFcs
  Else
  chkInstall
  End If
End Sub

위에 코드중에서 이부분

lngHwnd = FindWindow(vbNullString, "Sample App")

첫번째인자가 Class명입니다.
두번째인자가 caption값이구요...

class 명을 모르면 vbNullString 이런식으로 넣으면 되구요
반대인경우에는 caption 값에 vbNullString 를 넣는 식으로
하시면 됩니다.

정상적으로 다른 프로그램이 실행중이면 Hwnd 값이 나오고
실행중이 아니면 0 이 반환됩니다.

그런데 왜 시간을 소비했냐면 물론 전제적으로 프로그램이 잘안되서
이것저것 만지다보니 이렇게도 해보고 저렇게도 해보다가
코드가 뒤죽박죽....머이런 식이었습니다.

C++ 에서는

HWND hWnd;

hWnd = FindWindow( NULL,"Sample App");
위의 설명과 똑같이
첫번째 인자는 클래스이름이고
두번째 인자는 윈도우이름입니다(caption).

if(hWnd)
{
    SetForegroundWindow((HWND)(((DWORD)hWnd) | 0x01));
    return 0;
}

위에 코드는 클래스이름 또는 윈도우 제목이 일치하는 윈도우를 찻았다면
SetForegroundWindow 함수를 사용하여 그 윈도우가 활성 윈도우가 되게 하는 코드입니다.

그럼....오늘도 행복한 프로그래밍 하세요.
저도 행복한 프로그래밍을 하도록 노력하겠습니다.^^;
Posted by 빨강토끼
,
회사에서 업무용으로 SVN을 사용하고 있습니다.
계정을 등록하고 CheckOut를 하고 update를 하면서 작업을 하고는
commit를 하려하니 위의 제목과 같은 에러가 나면서 commit이 안되는 겁니다.
네이버등의 한국사이트에서는 정보를 얻을수가 없어서
구글에 들어가서 검색을 해보니 역시나 정보를 얻을수가 있었습니다.
잘못하는 영어실력이라서 한번에 이해가 되지않아 두세번 읽으니 이해가 되더군요.
사실 간단한 내용이였는데...ㅡㅡ;
역시 영어가 중요하다는걸 새삼 깨닮게 되었습니다.

Subversion, MKACTIVITY, and 403 forbidden Headaches

내용인즉슨
저장소주소를 잘확인해 보라는 겁니다.
예를 들어
My URL: http://svn.foobar.com/foobar
이라고 저장소 주소를 적여놨는데
사실은
My URL: http://svn.foobar.com/FooBar
라는 식입니다.
결국 대소문자가 다르면 업데이트(read)를 되지만 케밋(writer)은 안된다는 겁니다.

차~암 쉽죠...잉....


Posted by 빨강토끼
,

Wide Char 와 ANSI 사이의 변환을 간편하게 해주는 매크로입니다.
 매크로 인자 결과 
 A2CW  LPCSTR  LPCWSTR 
 A2W  LPCSTR   LPWSTR
 W2CA  LPCWSTR  LPCSTR
 W2A  LPCWSTR  LPSTR
 T2COLE  LPCTSTR  LPCOLESTR
 T2OLE  LPCTSTR  LPOLESTR
 OLE2CT  LPCOLESTR  LPCTSTR
 OLE2T  LPCOLESTR  LPCSTR

예)
USES_CONVERSION;

TCHAR widechar[]=L"sample";
char ansichar[10];
ansi = w2a(widechar);
Posted by 빨강토끼
,