■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build22
251 名前:デフォルトの名無しさん :04/08/25 02:33
トップウィンドウから徹底的にさがしまくる

252 名前:デフォルトの名無しさん :04/08/25 04:07
記録されている物理的なデータを暗号化する関数ってある?
例えば.txtの中身がaだけだととしても暗号化してrk&0 見たいに見えるようにするような

253 名前:デフォルトの名無しさん :04/08/25 05:02
ない

254 名前:デフォルトの名無しさん :04/08/25 05:58
DirectXを使わずにフルスクリーンウィンドウを作りたいのですが、その時解像度も指定する方法ってないですか?

255 名前:デフォルトの名無しさん :04/08/25 06:08
ChangeDisplaySettings

256 名前:254 :04/08/25 06:17
たすかりました!

257 名前:デフォルトの名無しさん :04/08/25 09:55
>>236
http://www.vector.co.jp/vpack/filearea/winnt/prog/debug/index.html

258 名前:デフォルトの名無しさん :04/08/25 09:59
>>244
そんなもん人の勝手だろうが

259 名前:デフォルトの名無しさん :04/08/25 10:15
メニューの折り返しも考慮してくれるAdjustWindowRectってありませんか?

260 名前:デフォルトの名無しさん :04/08/25 10:20
>>244
MSDNライブラリも頃される対象になるわけだな・・・。

261 名前:デフォルトの名無しさん :04/08/25 10:20
ない。仕方ないからWM_NCCALCSIZE投げて再計算してる
実際にウィンドウ作らないと計算できないのがイマイチだが

262 名前:デフォルトの名無しさん :04/08/25 10:59
実際のところ、メニューが折り返されてもそれを意識しないアプリも結構多いな。
漏れはメニューに等幅フォント使ってるんで時々そういうのに出くわす。

折り返すのがイヤならReBarスタイルのメニューを使うという手もあるが
マンドクサそうだ。

263 名前:デフォルトの名無しさん :04/08/25 11:15
>>261
WM_NCCALCSIZEを投げるサンプルみたいなものってどこかに無いでしょうか?
検索しても、WM_NCCALCSIZEに応答するサンプルしか見当たらず、
MSDNを見てもどのメンバを埋めてSendMessageするべきなのか検討もつきません。

264 名前:デフォルトの名無しさん :04/08/25 12:06
リサイズするときはこんな感じになるのかな

int ResizeWindowByClient(HWND hwnd, int width, int height, int times_to_try=2)
{
  RECT rc = { 0, 0, width, height};
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc));
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc)+1);
  ::AdjustWindowRectEx(&rc,
    ::GetWindowLongPtr(hwnd, GWL_STYLE),
    ::GetMenu(hwnd) ? TRUE : FALSE,
    ::GetWindowLongPtr(hwnd, GWL_EXSTYLE));

  for (int i = 0; i < times_to_try; i++) {
    RECT client = rc;
    ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&client));
    if (client.right-client.left == width && client.bottom-client.top == height) {
      ::SetWindowPos(hwnd, NULL, rc.left, rc.top,
        rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER|SWP_NOACTIVATE);
      return true;
    }
    rc.right += width + client.left-client.right;
    rc.bottom += height + client.top-client.bottom;
  }
  // これしとかないと、変更予定だったサイズでメニューが折り返すときおかしくなる
  ::GetWindowRect(hwnd, &rc);
  ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&rc));
  return false;
}


265 名前:デフォルトの名無しさん :04/08/25 12:52
俺はこんなのを使ってる
void AdjustWindowRect(HWND hwnd,int width,int height)
{
RECT wrect,crect;
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncwidth,ncheight;
ncwidth = (wrect.right - wrect.left) - (crect.right - crect.left);
ncheight = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncheight2 = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
if (ncheight != ncheight2)
{
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight2,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
}
RECT drect;
::GetClientRect(GetDesktopWindow(),&drect);
int x = wrect.left - (wrect.right > drect.right ? wrect.right - drect.right : 0);
int y = wrect.top - (wrect.bottom > drect.bottom ? wrect.bottom - drect.bottom : 0);
x = x < 0 ? 0 : x;
y = y < 0 ? 0 : y;
::SetWindowPos(hwnd,NULL,x,y,0,0,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
}

266 名前:デフォルトの名無しさん :04/08/25 17:53
CD-ROMの入れ替えで、ファイルリストの情報を更新したいのですが、上手く行きません。
入れ替えると、WM_DEVICECHANGEが来て、
ボリュームラベルなどの情報は取れるのですが、アイコンが更新されません。
アイコンを更新するためにはどうしたらいいのでしょうか?

267 名前:デフォルトの名無しさん :04/08/25 18:13
>>236 のツールのように他アプリの OutputDebugString 出力を取得するにはどうすればよいのでしょうか?

268 名前:デフォルトの名無しさん :04/08/25 18:26
>>266
よくわからんけど、SHChangeNotifyRegisterで登録して、
SHCNE_UPDATEIMAGEを待ってから取得するのはどうだろう?
アイコン取得方法とかもうちょい詳細を晒せば、誰かもっといい答えをくれるかも。

269 名前:デフォルトの名無しさん :04/08/25 19:01
>>268
ありがとうございます。
ただ、ドキュメントを見るとSHChangeNotifyRegisterはWin2K以降用なのでWin98では駄目みたいです。
アイコンはSHGetFileInfoで取得してます。
(フラグはSHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON)

270 名前:デフォルトの名無しさん :04/08/25 19:59
>>267
そのツールにはソースが付いてるだろ。読め

271 名前:デフォルトの名無しさん :04/08/25 20:46
>>269
Win98では隠しAPIかも。
www.geocities.com/SiliconValley/4942/
に載ってるので。

あとは、タイミングの問題に思えるので、ウェイト&リトライ入れるか
ポーリング入れるとか?

272 名前:デフォルトの名無しさん :04/08/25 22:35
OLEドラッグ&ドロップをエミュレートするにはどうしたらいいのでしょうか?
ウインドウについてるプロパティリストを見ると、
OleDropTargetInterface と OleDropTragetMarshalHwnd というのがくっついているので、
IMarshalを使うのかなと想像してるのですが、IMarshalを使った事無いので検索しようにも
手がかりがつかめません。

検索のヒントだけでも良いので挙げてもらえないでしょうか?

273 名前:デフォルトの名無しさん :04/08/25 22:56
エミュレートっていうのは分かりませんが、OLEドラッグ&ドロップを実現するには、
IDropSource、IDropTarget、IEnumFORMATETC、IDataObject等を実装する必要があります。

ドラッグ操作を開始するときは、DoDragDrop API(引数はIDataObjectとIDropSource)を
使用します。

ドラッグを受け付けるときは、RegisterDragDrop API(引数はIDropTarget)で
ドラッグ受け入れ用のインターフェイスを登録します。

RegisterDragDropで登録したあとは、いちおう念のため、IDropTargetを
CoLockObjectExternalでロックしておいたほうが安全のようです。

274 名前:デフォルトの名無しさん :04/08/25 23:24
>>273
レスありがとうございます。
エミュレートというのは、プログラムからバッチ処理的に直接ドラッグ&ドロップをしたいということで、
DoDragDropによってできる通常のマウスによるドラッグドロップではないのです。

ウインドウハンドルやプロセスID等から直接ターゲットプロセスのIDropTargetを操作したいんです。

275 名前:デフォルトの名無しさん :04/08/25 23:27
パスの取得方法について質問です
コマンドラインから
>hoge.exe "c:\aaa\bbb\ccc\ddd.txt"
と引数を渡してやったときに、フルパスからファイル名を除いた
c:\aaa\bbb\ccc\を取得したいのです。

ググった所、_splitpathでドライブ、ディレクトリ、ファイル名
に分割できる事はわかりましたが、一発でファイル名のみ除去できるAPIはないのでしょうか?

276 名前: ◆Z0vd5w812U :04/08/26 00:00
>>275
文字列のケツから'\\'を探して'\0'で置き換えればよいのでは?

277 名前:デフォルトの名無しさん :04/08/26 00:07
練習問題としてはありなんですが、バックスラッシュとか、
多バイト文字が不味いんじゃないでしょうか

標準で安全なものがあればそれを使うのが最善でしょうけど、
MFCとか.NETとかでならメソッドがあるみたいなんですけど……

278 名前:デフォルトの名無しさん :04/08/26 00:12
>>275
PathFindFileName()

279 名前:デフォルトの名無しさん :04/08/26 00:13
>>270
デルフィーのソースを読むのは嫌です

280 名前:デフォルトの名無しさん :04/08/26 00:24
>>274
なるほど。

反則的な技ですが、相手先のウィンドゥに直接WM_DROPFILESを送ってやることで可能です。
DROPFILES構造体用のメモリを確保し、そこに必要情報を書き入れ、相手先の
ウィンドウに送りつけます。

メモリ確保は、シェルAPIのSHGetMalloc(&pMalloc)でメモリインターフェイスを
取得し、pMalloc->Alloc()でメモリを確保します。

pMalloc->Alloc()で確保したメモリは異プロセス間で参照可能です。

pMallocを使用し終わった後はpMalloc->Release()を忘れないようにしてください。

なお、DROPFILESに入れるファイル名ですが、Windows NT系列ではUNICODE、
それ以外ではANSIで入れないといけないようです。
(DROPFILES::fWideも適切にセットする。)

281 名前:280 :04/08/26 00:26
あ〜。書いてしまった後でなんですが、これだと
>>直接ターゲットプロセスのIDropTargetを操作したいんです。
の希望に添えませんね…。
お役にたてなくてすみません。

282 名前:デフォルトの名無しさん :04/08/26 00:38
>>274
UndocumentedだがOleDropTargetInterfaceプロパティに
IDropTargetのポインタが入ってる。

283 名前:デフォルトの名無しさん :04/08/26 00:39
>>279
???
何でMSDNにDelphiのソースがあるの? 何か別のものを想像してないか?

284 名前:デフォルトの名無しさん :04/08/26 00:52
>>282
他プロセスからじゃ操作できないんじゃね?

285 名前:デフォルトの名無しさん :04/08/26 01:07
SetCursorPosでマウスカーソルを対象ウィンドウ上に移動してDoDragDropすればいける気もするが。

286 名前:デフォルトの名無しさん :04/08/26 01:08
>>284
そこはDLL注入とかでがんがる

287 名前:デフォルトの名無しさん :04/08/26 01:33
>>275
PathRemoveFileSpec()

288 名前:デフォルトの名無しさん :04/08/26 12:20
・子ダイアログである
・そのダイアログ上にあるコントロールを触った後でも、フォーカスは常にメインウィンドウにある
・フォーカスの有無にかかわらず、タイトルバーは常に明るい(灰色ではない)

以上の条件を満たすダイアログって作れますでしょうか?

要するにMFCのフローティングリバーと同じ挙動なのですが…
我々はあれを指加えて見てるしか無いのかな(´・ω・`)

289 名前:デフォルトの名無しさん :04/08/26 12:30
MFCならソース公開されてるじゃん。

290 名前:288 :04/08/26 12:40
>>289
すいません、書き忘れましたがVC++持って無いのがそもそもの悩みでして
公開されてるんですか。触りだけでもどなたか教えて頂けないでしょうか

MFCって、どこかで落とせるのかな…

291 名前:デフォルトの名無しさん :04/08/26 13:18
>>288
そのダイアログで、WM_ACTIVATEに応答してアクティブにならないようにすればいいんじゃないの?

292 名前:デフォルトの名無しさん :04/08/26 13:51
>>275
PathRemoveFileSpec

293 名前:デフォルトの名無しさん :04/08/26 13:54
>>288
WS_EX_TOOLWINDOW にして WS_EX_NOACTIVATE しておけばいいんじゃない?
(Win2K / XP 以降ってことで)。

294 名前:デフォルトの名無しさん :04/08/26 13:57
>>292
>>287

295 名前:288 :04/08/26 15:13
>>291-294
お二人ともレスありがとうございます
全て試してみましたが、しかしどうにも上手くいかないです。

・WM_ACTIVATE
メッセージが来たら親ウィンドウにSetFocusしてみましたが、何故か上手くフォーカスが移りません。

・WS_EX_TOOLWINDOW
リソースからダイアログを作り、後からexスタイルを変えた場合、
あるいは最初から自前でCreateWindowExした場合、いずれもフォーカスが無いときは
やはり灰色のタイトルバーになってしまいます…。

・WS_EX_NOACTIVATE
これは0x08000000でよろしいのでしょうか?
コントロールも含め、全てWS_EX_NOACTIVATEを指定してみましたが、
これもフォーカスは通常通りで…一応spyでスタイルが定まっているのは確認しました。

この際、タイトルバーの色が変わらない方法だけでも、詳しく教えて頂けないでしょうか。
私のWS_EX_TOOLWINDOWの使い方が間違っている気がします…。

296 名前:デフォルトの名無しさん :04/08/26 15:59
>>295
WM_NCHITTEST/HTTRANSPARENT

297 名前:288 :04/08/26 17:22
>>296
レスありがとうございます。やってみたのですが、ちょっと問題が。
・マウスメッセージが来なくなる
・タイトルバーをつかんでダイアログのの移動が出来なくなる(これは何とかなるかな)
・コントロールには、結局フォーカスが移る
・なのでコントロールをサブクラス化してWM_NCHITTESTを処理すると、コントロールが固まる
・タイトルバーはやっぱり灰色

なんか否定的なレスばかりで申し訳ないです。
もうVC(MFC)買ってこようかな…。

298 名前:288 :04/08/26 17:30
そうか、すいません>>288の文が不明瞭でした

・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 (メインウィンドウのダイアログのタイトルバーが共に)、常に明るい(灰色ではない)

まぁ、見栄えが悪いっていう理由だけなので、いい加減諦めるべきですかね…。

299 名前:デフォルトの名無しさん :04/08/26 17:36
・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 メインウィンドウのタイトルバーが共に、常に明るい(灰色ではない)

重ね重ねスマソ_| ̄|○

300 名前:デフォルトの名無しさん :04/08/26 17:45
ファイルを開く、名前をつけて保存、のダイアログが存在するかどうかを認識するのには
どういう方法があるでしょうか?

301 名前:デフォルトの名無しさん :04/08/26 17:45
>>297
MFCは
WM_MOUSEACTIVATE/ HTSIZEFIRST <= hittest <= HTSIZELAST で MA_NOACTIVATEを返し、
それ以外でDefWindowProcかな。

非アクティブでもタイトルバーの色がアクティブのままだったり、
他に細かい事いろいろやってるけど。

302 名前:デフォルトの名無しさん :04/08/26 17:51
>>298
それ、結構前にMFCだかVC関連のスレで出てた気がする。
ログにgrep掛けたけど、ちょっと見当たらなかった。

303 名前:デフォルトの名無しさん :04/08/26 19:04
>>297
よく探せば(海外も含めて)参考になるソースは転がっていると思うよ。
その時間を惜しんでVC++買ってきてサンプルを読むというのも間違ってないと思いますが。

304 名前:デフォルトの名無しさん :04/08/26 19:22
仮想ドライブ FileDisk (http://www.acc.umu.se/~bosse/) というソフトのGUI化をVB6SP5で目論んでいます。
仮想ドライブの情報を得るために、

Device = CreateFile(VolumeName, _
GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
0, _
OPEN_EXISTING, _
FILE_FLAG_NO_BUFFERING, _
0)

でデバイスハンドルをを取得

Const IOCTL_FILE_DISK_QUERY_FILE = &H802
Dim rc
rc = DeviceIoControl(Device, _
IOCTL_FILE_DISK_QUERY_FILE, _
Null, _
0, _
OpenFileInformation, _
Len(OpenFileInformation), _
BytesReturned, _
0)

で、構造体変数OpenFileInformationにドライブ情報が収納されて戻ってくるはずなのですが
DeviceIoControlがエラー6(ハンドルが無効です。)を返してしてしまいます。
FileDiskのC言語のソースをVBに書き直しただけのつもりなのですが
何故、うまく動かないのでしょうか?

305 名前:デフォルトの名無しさん :04/08/26 19:26
ちなみにVBに翻訳したい関数は↓です。

----
int FileDiskStatus(char DriveLetter)
{
char VolumeName[] = "\\\\.\\ :";
HANDLE Device;
POPEN_FILE_INFORMATION OpenFileInformation;
DWORD BytesReturned;

VolumeName[4] = DriveLetter;

Device = CreateFile(
VolumeName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL
);

if (Device == INVALID_HANDLE_VALUE)
{
PrintLastError(&VolumeName[4]);
return -1;
}



306 名前:デフォルトの名無しさん :04/08/26 19:27
OpenFileInformation = malloc(sizeof(OPEN_FILE_INFORMATION) + MAX_PATH);

if (!DeviceIoControl(
Device,
IOCTL_FILE_DISK_QUERY_FILE,
NULL,
0,
OpenFileInformation,
sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
&BytesReturned,
NULL
))
{
PrintLastError(&VolumeName[4]);
return -1;
}


307 名前:デフォルトの名無しさん :04/08/26 19:27
if (BytesReturned < sizeof(OPEN_FILE_INFORMATION))
{
SetLastError(ERROR_INSUFFICIENT_BUFFER);
PrintLastError(&VolumeName[4]);
return -1;
}

printf("%c: %.*s Size: %I64u bytes%s\n",
DriveLetter,
OpenFileInformation->FileNameLength,
OpenFileInformation->FileName,
OpenFileInformation->FileSize,
OpenFileInformation->ReadOnly ? ", ReadOnly" : ""
);

return 0;
}

----

308 名前:デフォルトの名無しさん :04/08/26 20:21
ほげほげ

309 名前:275 :04/08/26 20:40
>287,292

PathRemoveFileSpec()で無事取得できました。ありがとうございました。

310 名前:デフォルトの名無しさん :04/08/26 21:59
>>304-306
CでうまくいくのならそこをDLLにしてVBから呼び出すようにしたら?ちっとも解決にはなっていないけど。

311 名前:デフォルトの名無しさん :04/08/26 22:23
>>304
よくわからんけど、
>char VolumeName[] = "\\\\.\\ :";
↑このへんと
>VolumeName[4] = DriveLetter;
↑このへんはちゃんと理解してますよね。
つまり、"\\.\C:" みたいな文字列が、VolumeName に入ってますよね?

312 名前:デフォルトの名無しさん :04/08/27 01:17
>>311

>char VolumeName[] = "\\\\.\\ :";
>VolumeName[4] = DriveLetter;
↑がなんで4(5文字目)なのか解かっていませんが、自分のVBコードでは
VolumeName="\\.\" & DriveLetter
にしています。

そしてCreateFile関数で得られたDeviceにはINVALID_HANDLE_VALUEでない、
デバイスハンドルが取得されるところまでは成功しています。
が、その次のDeviceIoControl関数でエラー6(ハンドルが無効です。)となってしまうのです。
VBでデバイスコントールは難しいのでしょうか。

>>310
初心者な上に、VCも持っていないので、、


ちなみに>>305-307の関数をVBに↓のように書き直しました。


313 名前:デフォルトの名無しさん :04/08/27 01:20

Public Function FileDiskStatus(ByVal DriveLetter As String) As Integer

  Dim VolumeName As String
  Dim Device As Long
  Dim OpenFileInformation As POPEN_FILE_INFORMATION
  Dim BytesReturned As Long

  VolumeName = "\\.\" & UCase(DriveLetter) & ":"

  Device = CreateFile(VolumeName, _
                GENERIC_READ, _
                FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                0, _
                OPEN_EXISTING, _
                FILE_FLAG_NO_BUFFERING, _
                0)

  If Device = INVALID_HANDLE_VALUE Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  With OpenFileInformation
    OpenFileInformation.FileSize.Low = 0
    OpenFileInformation.FileSize.high = 0
    OpenFileInformation.ReadOnly = False
    OpenFileInformation.FileNameLength = UBound(OpenFileInformation.FileName)
  End With



314 名前:デフォルトの名無しさん :04/08/27 01:21
  Const IOCTL_FILE_DISK_QUERY_FILE = &H802
  Dim rc
  rc = DeviceIoControl(Device, _
                IOCTL_FILE_DISK_QUERY_FILE, _
                Null, _
                0, _
                OpenFileInformation, _
                Len(OpenFileInformation), _
                BytesReturned, _
                0)
  If rc = 0 Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  If BytesReturned < Len(OpenFileInformation) Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  Dim strFileName As String
  strFileName = OpenFileInformation.FileName
  MsgBox (DriveLetter _
        & OpenFileInformation.FileNameLength & " " _
        & strFileName & " " _
        & CStr(OpenFileInformation.FileSize.Low) & " " _
        & CStr(OpenFileInformation.ReadOnly))

  FileDiskStatus = 0

End Function


315 名前:デフォルトの名無しさん :04/08/27 01:23
POPEN_FILE_INFORMATION 構造体定義

Type LARGE_INTEGER
Low As Long
high As Long
End Type

Type POPEN_FILE_INFORMATION
FileSize As LARGE_INTEGER
ReadOnly As Boolean
FileNameLength As Integer
' FileName As String
FileName(1 To MAX_PATH) As Byte
End Type

-----

316 名前:デフォルトの名無しさん :04/08/27 10:33
VBのNullはVariantのNullなんだが問題ないんだろうか

317 名前:デフォルトの名無しさん :04/08/27 13:10
ツリービューがデフォルトで持ってるツールチップの
DelayTimeを変更するのは不可能ですか?

318 名前:デフォルトの名無しさん :04/08/27 14:57
TreeView_GetToolTips して TTM_SETDELAYTIME かな

319 名前:デフォルトの名無しさん :04/08/27 15:53
>>318
それやったんですが、無視されてしまうようです。
色やマージンなどは変更できたんですが…

320 名前:デフォルトの名無しさん :04/08/27 16:49
定義済みコントロールクラスのBUTTONで押されると押されたままになるボタンを作ることはできますか?
オーナー描画ボタンはめんどくさすぎるんで

321 名前:デフォルトの名無しさん :04/08/27 16:52
>>320
ラジオボタンだか何かのスタイルにそんなの(ボタン風の)が合ったような気がする・・・

322 名前:デフォルトの名無しさん :04/08/27 16:52
チェックボックス?

323 名前:デフォルトの名無しさん :04/08/27 16:53
BS_PUSHLIKE

324 名前:デフォルトの名無しさん :04/08/27 20:31
InvalidateRectやGetUpdateRectにわたす
RECTの幅と高さの計算はそれぞれ、

right - left + 1
bottom - top + 1

でいいでしょうか?
それとも、

right - left
bottom - top

でしょうか。

325 名前:デフォルトの名無しさん :04/08/27 20:38


326 名前:デフォルトの名無しさん :04/08/27 20:39
>>325
ありがとうございます!

327 名前:304 :04/08/28 04:50
>>316
Nullの代わりに0、""などを入れてみたところ今度はエラー1が出ました。
なんとなく次の段階に進めそうです。

と思ったのですが、FileDiskのGUIが見つかったので今回のプロジェクト?は中止します。
皆さん、ありがとうございました。

328 名前:デフォルトの名無しさん :04/08/28 07:02
最後までやれよ・・・

329 名前:デフォルトの名無しさん :04/08/28 07:43
>>327
vbNullString使え。

330 名前:デフォルトの名無しさん :04/08/28 09:35
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow )
これの右側部分の意味っていうか、なぜhinstanceとか入れなきゃならないんですか?
これは任意の名前でもいいんですか?


331 名前:デフォルトの名無しさん :04/08/28 09:56
>>330
まずC/C++の入門書読んで来い。このスレでする話じゃない。

332 名前:デフォルトの名無しさん :04/08/28 10:06
これだからシロートさんは困る。
省略するな。
WinMain(HINSTANCE handle_for_Instance_of_this_Process, HINSTANCE handle_for_Instance_of_Previous_Process, LPSTR long_pointer_for_Command_Line_String)

333 名前:デフォルトの名無しさん :04/08/28 10:09
>332
引数が一つ省略されてるのは仕様ですか?

334 名前:デフォルトの名無しさん :04/08/28 10:22
s/)/, int state_for_how_the_window_is_to_be_Shown)/

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那

335 名前:デフォルトの名無しさん :04/08/28 10:37
まぁ、WinMainの第二引数に名前つける奴は素人な訳だが。

336 名前:デフォルトの名無しさん :04/08/28 10:38

50文字未満:神

WinMain(HINSTANCE a,HINSTANCE b,LPSTR c,int d)

337 名前:デフォルトの名無しさん :04/08/28 10:39
HINSTANCE hInstance
HINSTANCE形の変数hInstanceてことですよね。
これは任意で名前変えても良いんですか?

338 名前:デフォルトの名無しさん :04/08/28 10:42
>>337レス嫁

handle_for_Instance_of_this_Process

b

になら変えることが許されている。

339 名前:デフォルトの名無しさん :04/08/28 10:42
憲法の解釈によっては問題ない。

340 名前:デフォルトの名無しさん :04/08/28 10:43
WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {}
使わないからこれでいいんだよ

341 名前:デフォルトの名無しさん :04/08/28 10:45
void WinMain(void);

342 名前:デフォルトの名無しさん :04/08/28 10:47
>>338
だから任意で変えてもかまわないんですよね

343 名前:337 :04/08/28 10:51
hInstance を b にかえてみたら、

error : parameter "hInstance" not declared

やっぱり他の名前に変えたらだめなんじゃないですか!!
しろうとに嘘教えてそんなに楽しいですか?
ここはひどいインターネットですね。

344 名前:デフォルトの名無しさん :04/08/28 10:53
>>343
おい、俺のフリするなや

345 名前:337 ◆ZIIQIs.HCM :04/08/28 11:00
ニセモノが居るのでトリップつけてみました。

346 名前:デフォルトの名無しさん :04/08/28 11:02
お前も質問者と一緒にどっか行け

347 名前:デフォルトの名無しさん :04/08/28 11:03
void WinMainCRTStartup(void)
で。

348 名前:337 ◆DeUsmjHgh2 :04/08/28 11:04
はー、トリップ付けたからって偽者が本物になるわけないでしょうに

349 名前:337 ◆PIbfznOsNc :04/08/28 11:09
みんないいかげんにしてください。

350 名前:337 ◆DeUsmjHgh2 :04/08/28 11:11
俺だけ下げてないから本物ってわかりますって

351 名前:337 ◇DeUsmjHgh2 :04/08/28 11:16
答えてくれるまで上げます。

352 名前:337 ◆DeUsmjHgh2 :04/08/28 11:17
・・・もういいよ。お前ら人が悪いな。

353 名前:デフォルトの名無しさん :04/08/28 11:19
>>331で終わってるんだよ。

354 名前:デフォルトの名無しさん :04/08/28 11:29
いや、収穫もあったぞ。

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那

俺は見習いか・・・意外と当たるな。

355 名前:デフォルトの名無しさん :04/08/28 12:17
つーかそんなのコピペで済ましてますがw

356 名前:デフォルトの名無しさん :04/08/28 13:20
SetWindowsHookEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、フックの種類がいくつかあるようですが、
どういう場合にどのフックを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのフックとか解説している
サイトがあれば教えてください。

357 名前:デフォルトの名無しさん :04/08/28 13:23
このへんとか
ttp://www.h3.dion.ne.jp/~toomo/html/fuck.html

358 名前:デフォルトの名無しさん :04/08/28 13:28
変数名は大事だよ〜
特に1つのプロジェクトを複数人で組むときとか大事だよ〜

359 名前:337 ◆DeUsmjHgh2 :04/08/28 13:31
そういえば皆さんはプログラム作るときに、コピーしまくってますよね?

360 名前:デフォルトの名無しさん :04/08/28 13:55
マウスホイールの値を取得できるAPIはありませんか?

361 名前:デフォルトの名無しさん :04/08/28 14:00
>>357
fuckて。明らかに英語間違ってるような。エロサイトかと思った。
腕時計を見るように腕を傾けるのはよくわかった。ありがとう。

362 名前:デフォルトの名無しさん :04/08/28 14:01
GetWheel

363 名前:デフォルトの名無しさん :04/08/28 14:13
>>357
rinku.htmlを見たとき以来の笑撃だ

364 名前:デフォルトの名無しさん :04/08/28 14:16
マウスホイールの値とは?

365 名前:デフォルトの名無しさん :04/08/28 14:27
>>357
( ゜д゜)・・・

366 名前:デフォルトの名無しさん :04/08/28 14:31
fuck打ちまくり

367 名前:デフォルトの名無しさん :04/08/28 14:32
356 名前:デフォルトの名無しさん[sage] 投稿日:04/08/28 13:20
SetWindowsFuckEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、Fuckの種類がいくつかあるようですが、
どういう場合にどのFuckを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのFuckとか解説している
サイトがあれば教えてください。

368 名前:360 :04/08/28 15:23
>>362
検索しても見つかりませんでしたが…。

>>364
ホイールをどれだけ回転させたかの値です。
WM_MOUSEWHEELメッセージのwParamの上位ワードのような。

369 名前:356 :04/08/28 16:29
>>357
フックの勉強にはなりましたが、
WH_CALLWNDPROC とか、 WH_GETMESSAGE とかに
ついての解説は残念ながらないようです。

それらについて解析したページお願いします。

370 名前:デフォルトの名無しさん :04/08/28 16:33
msdn見ろカス

371 名前:デフォルトの名無しさん :04/08/28 17:07
システムイメージリストのイメージとオリジナルのイメージを
ひとつのリストビューで使いたいのですが、
システムイメージリストにオリジナルのイメージを追加するのが良いのか、
システムイメージリストをコピーして使うのが良いのか、どちらでしょうか?

Win2kとかだと、システムイメージリストもアプリケーションローカルのようなので、
好きなように編集してよさそうなのですが、2kとXPしか環境が無いので
どういった作法がいいのか分かりません。

372 名前:デフォルトの名無しさん :04/08/28 17:46
>>370
知らなけりゃ、だまっていいよ。

373 名前:デフォルトの名無しさん :04/08/28 18:03
ぐぐるだけで日本語のサイトが見つかるだろう>>356
http://www.kab-studio.biz/Programing/Codian/

374 名前:デフォルトの名無しさん :04/08/28 18:48
SelectClipRgnした後、リージョンを削除するにはNULLを指定すればいいみたいだけど
選択前のリージョンに戻したい場合はどうすればいいのか分からないです。
SelectObjectの戻り値もオブジェクトではなく、ステータスだし・・・

375 名前:デフォルトの名無しさん :04/08/28 18:52
windowの背景色をmenuの背景色と同じにするにはどうしたらいいですか?

376 名前:デフォルトの名無しさん :04/08/28 18:55
hbrBackground = GetSysColorBrush(COLOR_MENU);

377 名前:デフォルトの名無しさん :04/08/28 18:58
hbrBackground = (HBRUSH)COLOR_MENU;

378 名前:デフォルトの名無しさん :04/08/28 18:59
>>373
レスありがとうございます。

しかし、WH_CALLWNDPROC  の説明として「すべてのメッセージ」と書いてありますが、
WM_KEYDOWN は通過しないようです。
一方、WH_GETMESSAGE も「すべてのメッセージ」と書いてありますが、
WM_ACTIVATE は通過しないようです。

WM_XXXXX をフックしたいときは、WH_XXXXXみたいな対応が
わかれば助かるんですが。

それと、WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
それならどちらを使っても同じなのか、それともそれぞれにどのような
メリット・デメリットがあるのかなどの解説は、ぐぐっても msdn でも見つけられませんでした。
(探し方が下手なのかもしれませんが)

どなたかご存じないですか?
あるいは、みなさんは、フックするときにどの WH_XXX を使うか、どういう基準で決めてますか?
よろしくお願いします。

379 名前:デフォルトの名無しさん :04/08/28 19:00
>376
できました
ありがとうございました。

380 名前:デフォルトの名無しさん :04/08/28 19:01
>>377
+1しないとだめ

381 名前:デフォルトの名無しさん :04/08/28 19:10
>>378
難しいことは俺もわからんのだが、
WH_CALLWNDPROCとWH_GETMESSAGEの違いは分かってる?
名前の通り、WH_CALLWNDPROCの方はウィンドウプロシージャのフック。
WH_GETMESSAGEはメッセージキューのフック。

フックしたいものが、メッセージキューを通るのか、SendMessageみたいに直接プロシージャを呼び出すのか、
によって決めればいいんじゃないかな。

WM_KEYDOWNとWM_ACTIVATEがどういう風に送られるかは知らないので、自分で調べてください。

382 名前:デフォルトの名無しさん :04/08/28 19:23
>>380
なんで?

383 名前:デフォルトの名無しさん :04/08/28 19:32
>382
COLOR_SCROLLBARで何が起きるか考えて試してみな。

384 名前:デフォルトの名無しさん :04/08/28 20:54
>>208を見たところ、プロセスごとのメモリ情報は>>210, >>212の方法で取得できるようですが、
スレッドごとのスタックサイズを取得する方法はあるのでしょうか?
ありましたら、教えていただきたいです。

385 名前:デフォルトの名無しさん :04/08/28 21:38
あるスレッドがいまどんだけスタック食ってるかって
どうやったら分かりますかね?

386 名前:デフォルトの名無しさん :04/08/28 21:51
>>374
SaveDC, RestoreDC

387 名前:デフォルトの名無しさん :04/08/29 01:47
>>385
開始位置のSPを憶えておいて比較したいところで引き算するしかないね。

388 名前:デフォルトの名無しさん :04/08/29 02:40
デスクトップマスコットを作っているのですが
リージョンを作成する系統の命令(CreateRectRgnなど)を
連続して呼びだすと、他のアプリの一部が無限にちらついてしまう現象が
起こります。(自作のマスコットアプリにかぎらず)
Exel2003やWord2003などの一部の図形を表示しているとかなりひどいです。
原因や回避方法をご存知のかたおられませんか?


389 名前:デフォルトの名無しさん :04/08/29 02:59
>>378
WH_CALLWNDPROC は SendMessage() で送られてきたキューを通過しないメッセージ
しか捕まらない。だから WM_KEYDOWN は捕まらない。
反対に、WH_CALLWNDPROC はキューを通過するメッセージしか捕まらない。英語の
ヘルプやMSDNでは、キューを通るメッセージは posted 通らないのは sent と
なっているので区別できる。

>WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
>それならどちらを使っても同じなのか

同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
なのでオーバヘッドは小さいだろうね。専用なので間に合う場合はそれを
使った方がいい。

390 名前:デフォルトの名無しさん :04/08/29 03:05
>>388
CreateRectRgnなどのリージョンをつくるAPIは、DCハンドルと関係ないでしょう。
ちらつく理由がないのでは? もしかして、つくるたびに描画してるかクリッピング
してるんでは?

391 名前:デフォルトの名無しさん :04/08/29 05:03
UpdateLayeredWindowを使って半透明Windowを作っているのですが、
α値を持つ画像を表示すると
(下のWindowの色)*(1−α)+(半透明Windowの色)*α
ではなく
(下のWindowの色)*(1−α)+(半透明Windowの色)
となってしまうのは仕様でしょうか?
α値を持つ画像のR・G・Bに前もって自分でα値を掛けておかなくては駄目なのでしょうか。

392 名前:デフォルトの名無しさん :04/08/29 06:19
ダメじゃありません

393 名前:デフォルトの名無しさん :04/08/29 07:36
むぅ。何がいけないですか。
BLENDFUNCTION?BITMAPINFO?

394 名前:デフォルトの名無しさん :04/08/29 08:12
そんだけで分かったらエスパーだ


395 名前:デフォルトの名無しさん :04/08/29 08:15
ttp://azumaya.s53.xrea.com/index.php?page=doc/win32api/layeredwindow
ここに書いてあるとおりにやったのですが…。

396 名前:デフォルトの名無しさん :04/08/29 09:27
…なんでDIBSection相手にGet/SetDIBitsしてるんだ?

>>391
後者のほうが描画時の演算コスト低いだろ? そういうことで納得しとけ。

397 名前:デフォルトの名無しさん :04/08/29 09:49
Get/SetDIBitsは意味なさそうな感じだったのでやめておきました。
やっぱり前もってαを掛けておかないと駄目ですか…。

398 名前:デフォルトの名無しさん :04/08/29 10:02
DLL側から、それを呼び出しているEXE側の使用しているメモリ範囲を
取得するようなAPIはないでしょうか?

やりたいことは、呼び出し元プログラムの使用しているコード領域と
データ領域から特定のバイト列を検索したいのですが範囲がわからないと
どこまで読み取ればいいのか決められません


399 名前:デフォルトの名無しさん :04/08/29 10:06
>>398
VirtualQueryを駆使すればできそう

400 名前:デフォルトの名無しさん :04/08/29 11:12
>>389
>キューを通るメッセージは posted 通らないのは sent と
>なっているので区別できる。
ここで見分ければいいんですね。勉強になりました。

ひとつのフックですませる方法はなさそうなので、
WH_CALLWNDPROC と WH_GETMESSAGE 両方フックすることにします。

>同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
>なのでオーバヘッドは小さいだろうね。
違いがオーバーヘッドだけなら、WH_GETMESSAGE でフックしておいて
パフォーマンスに問題がでたときだけ WH_KEYBOARD に変えるような
使い方にしたいと思います。

仕様の違いではまったりするのはイヤなんで・・・・。

ありがとうございました。


401 名前:デフォルトの名無しさん :04/08/29 12:14
>>384
GetThreadContextでスタックポインタを拾って
VirtualQueryExでスタックポインタを含むメモリ領域のサイズを拾う
実際に試してないのでうまくいかなくても知らんが

402 名前:デフォルトの名無しさん :04/08/29 12:19
INIファイルのセクション名を変更することってできますか?
MSDNを読んでみてもkeyに対する値の変更や削除については発見
できたのですがセクション名の操作に関しては発見できませんでし
た。


403 名前:デフォルトの名無しさん :04/08/29 12:50
>>387
>>401
ソレしかないですかね。。。
ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
直接は無理そうです
VirtualQueryExで辿ってみます・・・

404 名前:デフォルトの名無しさん :04/08/29 12:57
>>402
GetPrivateProfileSection(A, buffer)
WritePrivateProfileSection(B, buffer)
WritePrivateProfileSection(A, "")
ではどうだろう、と思ったが元のセクション名が残っちゃいそうだな。
テキストファイル操作で書き換えるのが早いんでないの。

405 名前:デフォルトの名無しさん :04/08/29 13:01
>>404
WritePrivateProfileSection(A,NULL,filename)
で完全に削除できなかったっけ?

406 名前:402 :04/08/29 13:03
>>404-405
レスありがとうございます。
完全に削除する場合は>>405さんの言うようにすればいいのですが、
特定のセクション名だけを変更したかったので無理みたいですね。
テキストファイル操作のほうが早いみたいなのでそうしてみます。
ありがとうございました。

407 名前:405 :04/08/29 13:52
>>406
いや、特定のセクションだけ削除できるんだけど…。

セクションじゃなくてキーの名称を変更したいのかな?

408 名前:388 :04/08/29 14:37
>>390
どうやらさらに調べると
CreateRectRgnではなくて
ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと、
Exeelなどで相性が悪いようです。

うーん、何でだろうなあ


409 名前:デフォルトの名無しさん :04/08/29 14:38
>>408
形状をいじりたいだけなら、LayeredWindowにしてはどうですか?
これならパフォーマンスあまり落ちませんよ

410 名前:デフォルトの名無しさん :04/08/29 15:44
>ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと

そりゃ、描画に影響するクリッピングを繰り返すわけだから当然。なぜ、まとめて一回に
しないのか不思議。

411 名前:388 :04/08/29 16:06

>>409
ありがとうございます、しらべてみます



>>410
アニメーションさせたいからです


412 名前:デフォルトの名無しさん :04/08/29 16:20
便乗して質問したいのですが、
レイヤードウィンドウを使う仕様にした場合でも、
win98やMEで動作させる方法はあるんですよね?

友達の家のPCで動かしたいんですが、
user32.dll?がなかったので動きませんでした。
調べても説明が端折られてて理解できなかったので、
1から学びたいのですが。

413 名前:デフォルトの名無しさん :04/08/29 16:24
> アニメーションさせたいからです

アニメーションするのにクリッピング? 透過描画はできないの?

414 名前:デフォルトの名無しさん :04/08/29 18:44
プリンタのスプーラの状態を監視するプログラムを作りたいのですが
どういったAPIを使えばいいのでしょうか?

作りたいプログラムはAというプログラムで、別にBとCというプログラムが
存在し、例えばBというプログラムが印刷をプリンタに依頼したら、
Aプログラムがリアルタイムにそのイベントを察知し、なおかつ印刷を
Bが依頼したという事をわかるようにしたいのですが・・・

抽象的な質問でスマソ

415 名前:387 :04/08/29 21:13
>>403
>ソレしかないですかね。。。
単純にSPだけ見たいのなら
int dat;
_asm mov dat, esp
でできるよ。VC6+x86系

>ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
>直接は無理そうです
デバッガで追うしかないな。


416 名前:デフォルトの名無しさん :04/08/29 23:29
>>412
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp
>WS_EX_LAYERED
>Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows.
> Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.

417 名前:デフォルトの名無しさん :04/08/30 00:16
普通のウィンドウを子ウィンドウとして作成すると
ウィンドウプロシージャにWM_CREATEメッセージが送られてしまいます。
これを何とか送られないようにする方法はありませんか?

418 名前:デフォルトの名無しさん :04/08/30 00:25
作成しないか、WM_NCCREATEでFALSEを帰す

419 名前:デフォルトの名無しさん :04/08/30 00:42
>>415
というかGetThreadContextというキーワードはすでに与えたんだがなあ

420 名前:デフォルトの名無しさん :04/08/30 01:14
>>419
ソースのないライブラリの奥底で呼ぶことはできんでしょ。

421 名前:デフォルトの名無しさん :04/08/30 06:50
>>420
それはインラインアセンブラでesp見るのも同じでしょ

422 名前:デフォルトの名無しさん :04/08/30 12:45
InvalidateRectでたとえばA(0,0)-(20,15)、B(100,0)-(20,115)の二つの領域をアップデートしたいのですが、

InvalidateRect(hwnd, A, TRUE);
InvalidateRect(hwnd, B, FALSE);

とすると、両方とも背景が消去されてちらついてしまいます。
それぞれのInvalidateRectにUpdateWindowを挟むと
WM_PAINTを二回呼び出す事になって無駄が多すぎます。

何か良い手はないでしょうか

423 名前:デフォルトの名無しさん :04/08/30 13:06
WM_ERASEBKGNDをどうにかする。

424 名前:デフォルトの名無しさん :04/08/30 17:59
>>422
そこでInvalidateRgn()の登場ですよ

425 名前:デフォルトの名無しさん :04/08/31 07:01
タスクバーのように、デスクトップの作業領域を少し狭めたいと思っています。
RECT r = DefaultWorkArea;
// r設定
SystemParametersInfo(SPI_SETWORKAREA, 0, &r, SPIF_SENDCHANGE);
とかやってみたのですが、少し足りない感じです。たとえば、最大化していて
スクリーンセーバーになり、セキュリティの関係でログオン画面に戻る設定に
してあると(今使ってるのはXP)、再びログオンしたときに最大化していた
ウィンドウがめり込んでいます。
何が足りないのでしょう。

426 名前:デフォルトの名無しさん :04/08/31 07:25
AppBarかDeskBandにしとけば?

427 名前:デフォルトの名無しさん :04/08/31 07:40
そもそもタスクバーとかは特別なウィンドウなんですか。
じゃあしょうがないのかなー。
今やってるのはランチャーの改造です。
具体的にはNCW。やっぱソース公開していただくとありがたいですね。

428 名前:デフォルトの名無しさん :04/08/31 11:41
>>426が言うように SHAppBarMessage の説明みて AppBar にするのが吉。

429 名前:デフォルトの名無しさん :04/08/31 19:02
ini関連のAPIについての質問です。
GetPrivateProfile〜やWritePrivateProfile〜は、WinNT系OSでは
レジストリにマッピングされることがあるそうですが、実際上
どのくらいの頻度でそのような設定になっているのでしょうか?

430 名前:デフォルトの名無しさん :04/08/31 19:29
頻度ってなんじゃ?
3回に1回はiniに書き込まれたりするのか?

431 名前:デフォルトの名無しさん :04/08/31 20:06
何かすごく勘違いしている模様だ

432 名前:デフォルトの名無しさん :04/08/31 20:10
WindowsAPIを使う上でWindows特有の型がたくさんあるわけですが
文字列ひとつとってもPTSTR、PCTSTR、LPCSTR、LPSTRなどなど
この辺の変数を使うときに、結構適当な扱いをしても動いてしまうため
もしかすると間違ったまま使っているかもしれません

型定義について詳しく正確に書かれているWEBや本はないでしょうか?
探した範囲では、どの資料も正確さに欠けていて
いまいち期待通りのものがありませんでした

一度きちんと勉強したいので・・・


433 名前:429 :04/08/31 20:17
申し訳ありません。言葉がなっておりませんでした。先ほどの質問の
意図するところは、「ini関連のAPIにおいて、レジストリにマッピング
される条件はどのようなものか確認したい」ということです。Platform
SDKのヘルプを見る限りでは、私は「独自にiniファイルを作った場合
にはレジストリには書き込まない」という解釈を行ったのですが、
それでよろしいでしょうか。

434 名前:デフォルトの名無しさん :04/08/31 20:18
>>432
ヘッダを読めば?

435 名前:デフォルトの名無しさん :04/08/31 20:41
>>422
というか、レジストリにマッピングするためにはそのように設定しなきゃ
ならない。そう設定しない限りはマッピングされない。


436 名前:デフォルトの名無しさん :04/08/31 21:25
>>432
MSDNに全部書いてある。


437 名前:デフォルトの名無しさん :04/08/31 22:34
俺、TCHAR * と const TCHAR * しか使ってないや…

438 名前:デフォルトの名無しさん :04/08/31 22:34
LPSTR Pointer to a null-terminated string of 8-bit Windows (ANSI) characters.
LPWSTR Pointer to a null-terminated string of 16-bit Unicode characters.
LPTSTR An LPWSTR ifUNICODE is defined, an LPSTR otherwise.

LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters.
LPCTSTR An LPCWSTR ifUNICODE is defined, an LPCSTR otherwise.

439 名前:デフォルトの名無しさん :04/08/31 22:38
↑LPを脳内でルプって呼んでたけどやっぱエルなんだ。>>432のばか

440 名前:デフォルトの名無しさん :04/08/31 22:54
InitCommonControlsExにICC_STANDARD_CLASSES渡したら
失敗する・・・。
というか、このフラグに何の意味あるのか分からんが。

441 名前:デフォルトの名無しさん :04/08/31 23:18
>>440
Win98だけど別に失敗はしないよ。

> ICC_STANDARD_CLASSES
> Load one of the intrinsic User32 control classes.
> The user controls include button, edit, static, listbox, combobox, and scrollbar.
確かにわざわざ指定する意味はないように思えるね。

442 名前:デフォルトの名無しさん :04/08/31 23:37
そうですか、動きますか
うちはXPなんですが
manifestでコモンコントロールを6.0.0.0に指定してるのが
いけないんだろうか
ググってもそれらしい情報ないし、
それともうちの環境が変なだけなのかもしれない

443 名前:デフォルトの名無しさん :04/09/01 09:17
RichEditコントロールで保持しているRTFフォーマットのサイズを取得したいのですが、、
現状ではコールバックではデータをファイルに書き込まず、
コールバックに渡されるサイズを合計して合計を求めていますが効率がいいとは言えません。
もっと他にサイズを求める手段はありますか?

RTFデータをファイルに単体のRTFファイルとして書き込むのではなく、
メモリーに出力する為の確保するメモリ量を知りたいんです。


444 名前:デフォルトの名無しさん :04/09/01 09:25
コントロールパネルに表示されるアイテムのコメントや、
ごみ箱内のファイルの「元の場所」や「削除した日」を取得するAPIってありますか?

445 名前:デフォルトの名無しさん :04/09/01 10:04
質問です。

SendMessage(hWnd, WM_GETTEXT, 256, lpszTmp);
とやって、他アプリケーションのエディットコントロール内の文字列を取得してみようと試みました。
メモ帳やEdMax(フリーメーラー)のものは簡単に取得できたのですが、
IEやOutLookのエディットコントロールから取得しようとすると""が返って来てしまいます。

例えばIEでGoogleで検索文字列を入れる部分などです。
IEなどのMS製品は、何か特殊なことがされていて、取得できないのでしょうか?

446 名前:デフォルトの名無しさん :04/09/01 10:14
>>445
そもそも、IEの入力フォームがウィンドウかどうかって問題があるが・・・

spy++で試したが、どうもウィンドウじゃなさげ

447 名前:デフォルトの名無しさん :04/09/01 10:15
>>444
IShellFolder2::GetDetailsOf ?

448 名前:デフォルトの名無しさん :04/09/01 10:22
>>445
わかってるかとは思うが他のアプリに素のSendMessageは
巻き込まれキケンのおそれ。質問に関係ないけど一応。

449 名前:デフォルトの名無しさん :04/09/01 10:29
>>445
CB_GETEDITSEL
EM_GETTEXTEX
あたりは試した?試して報告してみて。

450 名前:デフォルトの名無しさん :04/09/01 10:30
>>446
エディットコントロールって言ってるんだから、アドレスバーとかの話じゃないの?
アドレスバーだったら、コンボボックスだから、さらにその中のエディットコントロールを
取得しないとダメだったきがする。

451 名前:446 :04/09/01 10:34
>>450
>例えばIEでGoogleで検索文字列を入れる部分などです。
って、あったのでフォームかな?、と

よく考えれば、Googleツールバーてのもあったな
漏れは使ってないけど・・・

452 名前:デフォルトの名無しさん :04/09/01 10:40
test

453 名前:デフォルトの名無しさん :04/09/01 10:45
test

454 名前:444 :04/09/01 11:00
>>447
ありがとうございます。期待どおりの結果を取得できました。

455 名前:デフォルトの名無しさん :04/09/01 11:04
ビットマップについて質問です。

BITMAPINFOの説明なのですが、biCompressionがBI_RGBの場合、
bmiColorsはNULLであると言う説明がいまいちわかりません。
bmiColors[0]の各要素が0である事を指すのか、それともbmiColors自体が存在しないで
メモリイメージはBITMAPINFOHEADERと同一のものに鳴るのか、どちらなのでしょうか?

456 名前:デフォルトの名無しさん :04/09/01 11:08
やや、ありがとうございます

>>446
なんと、ウインドウではないのですか?
hWndはとれて、SendMessageでWM_CHARなどを送ると反応するので、Windowだと思いますが

>>449
他アプリに勝手に干渉するあたり、危険は承知です

>>449
今から試してみます

>>450-451
やや、失礼しました。フォームのことです。

457 名前:デフォルトの名無しさん :04/09/01 11:20
>>456
君はプログラマの素養がないので、今すぐあきらめた方がいいな。

458 名前:デフォルトの名無しさん :04/09/01 11:24
>>457
ヤメレ、無駄に煽るのは。

459 名前:デフォルトの名無しさん :04/09/01 11:29
>>446での指摘の通り、どうも普通のウインドウではなさげです。
>>449での指摘の通り、通常のウィンドウとは違く、リッチテキストかもしれません。
リッチかな?という方向で調査してみようと思います。

特になければしばらく調査ですのでカキコしないと思いますが、
何か情報ありましたらよろしくお願いいたします。ここ自体は見ていますので。


460 名前:デフォルトの名無しさん :04/09/01 11:39
>>459
リッチテキストですらないけどな。
たとえばゲームの中のメニューの内容を外部のアプリケーションから取得できるか?

IEのウインドウからDOMを取得して構造解析するしかない。

461 名前:446 :04/09/01 12:25
>>459
フォームに値を設定・取得することなら
IEコンポーネント使えばいける

IEコンポーネントスレなくなっちゃってるんで、
過去ログだが、この辺読むと少しは分かるかも

http://pc5.2ch.net/tech/kako/982/982930049.html

462 名前:デフォルトの名無しさん :04/09/01 12:39
>>455
なんかまるっきり間違ってるが、どこの何を参考にした?

463 名前:デフォルトの名無しさん :04/09/01 12:57
>>462
どこが間違っているのかわっぱり見当つきません。
よろしければ教えてもらえませんか?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1rw2.asp
biBitCount
16 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.
24 The bitmap has a maximum of 2^24 colors, and the bmiColors member of BITMAPINFO is NULL.
32 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.

です。

非パレットベースのビットマップファイルの場合はRGBQUADに相当するデータが存在しないのはわかるのですが
DIB関数に渡すときはどう指定するべきなのかが分からないんです。

464 名前:デフォルトの名無しさん :04/09/01 14:03
>>463
一般にbmiColorsが必要ない場合にはBITMAPINFOHEADERを確保して、それへのポインタをBITMAPINFO*にキャストする。

ただし、biBitCountが16以上で、biCompressionがBI_RGBであってもbiClrUsedが0でないの場合にはbmiColorsが使用される。

465 名前:デフォルトの名無しさん :04/09/02 01:20
MFCを使わないで分割ウィンドウを作るにはどうしたらいいのでしょうか?
MFCを使えばCSplitterWndで出来るようなのですが使わない場合については
わかりません。
やり方のわかる方、説明お願いします。


466 名前:デフォルトの名無しさん :04/09/02 01:53
>>456
SendMessageTimeoutとかモアベターよぐらいの意味>危険

467 名前:デフォルトの名無しさん :04/09/02 01:59
>>465
ttp://zidney.define.jp/programing/
ttp://www.kumei.ne.jp/c_lang/index_sdk3.html


468 名前:デフォルトの名無しさん :04/09/02 02:31
PostMessage()でいいやん?

469 名前:デフォルトの名無しさん :04/09/02 03:02
>>468 ハァ?

って言えばいいのかな。

470 名前:465 :04/09/02 07:51
>>467
ありがとうございます。
教えてもらったページを参考にやってみたいと思います。


471 名前:デフォルトの名無しさん :04/09/02 13:53
タスクバーもどきを作りたいのですが、
他プロセスのウインドウのアイコンの取得方法がわかりません。
検索キーワードとかでもいいのでヒントだけでもお願いします。

472 名前:デフォルトの名無しさん :04/09/02 16:01
WindowProc(メッセージ処理コールバック関数)に渡されるメッセージID(uMsg)をメッセージ文字列に変換する関数はありますか?
例えば、WM_CREATEなら"WM_CREATE"にするような。
イベントの発生状況を知りたいのだけれど、数値IDだと読み解くのがめんどくさい。

473 名前:デフォルトの名無しさん :04/09/02 16:04
>>472
API としては存在しないと思うので、
http://cvs.sourceforge.net/viewcvs.py/peace/peace/dll/ui.so/dumpmessage.c?rev=1.4&view=markup
からコピペで。


474 名前:デフォルトの名無しさん :04/09/02 16:13
>>473
うおっ、速攻ありがとう。
やはり無いのか。。。。それ使います。サンクス!

475 名前:デフォルトの名無しさん :04/09/02 16:20
セーフモードで起動したときも、
自作プログラムを自動実行させられる手段ってないのでしょうか?

476 名前:デフォルトの名無しさん :04/09/02 16:32
>>475
ウイルスでも作るつもりか糞野郎

477 名前:デフォルトの名無しさん :04/09/02 16:43
簡単に釣られすぎ。

478 名前:デフォルトの名無しさん :04/09/02 16:59
>>471
思い切り勘だけで答えると
1.プロセスからモジュール取得(EnumProcessModuleとか?)

2.モジュールからアイコン取得(SHGetFileInfoとかLoadIconとか?)
という手順かなあ?
外してたらごめんな

479 名前:デフォルトの名無しさん :04/09/02 17:06
>475
何しぇるために必要なのかにゃ?

480 名前:デフォルトの名無しさん :04/09/02 17:13
DrawCaptionつー、わりとまんまなAPIがあったりするわけだが。使ったことないから詳細は知らんが。

481 名前:475 :04/09/02 17:15
普段、特殊な認証をして社内のリソースに繋いでいるんですが、
マシンのメンテの時にそれをいちいち手動でやらなきゃいけないので。
マシンの数が多いんですよ。

方法がないんだったらしようがないんですが。

482 名前:デフォルトの名無しさん :04/09/02 17:16
意味がわからん。

483 名前:デフォルトの名無しさん :04/09/02 17:26
セーフモードにしてメンテする理由がわからん

484 名前:デフォルトの名無しさん :04/09/02 17:27
>>475
漏れはこれ、ないって認識なんだがそれであってる?他の人。
(あっても内容を答える必要はないと思うが。)

485 名前:デフォルトの名無しさん :04/09/02 17:40
ウィルス駆除とかじゃないの?

486 名前:デフォルトの名無しさん :04/09/02 17:46
>>484
2個ほど思いついたけど。
Tで設定するのとSの設定変えるのと。

487 名前:486 :04/09/02 17:48
本当に出来るかは試したことないからわからないです

488 名前:デフォルトの名無しさん :04/09/02 18:18
>>478
それだと目的のウインドウで使われているアイコンと関係ないアイコンしか取れないですよね
DLL Injection使うしかないんでしょうか

489 名前:デフォルトの名無しさん :04/09/02 18:33
>>488
普通に WM_GETICON じゃダメなんですか?

490 名前:デフォルトの名無しさん :04/09/02 19:39
EXCELでAPI使いたいんですが、
APIビューアがないんです。
どこにあるんでしょうか?


491 名前:デフォルトの名無しさん :04/09/02 20:59
SetWindowRgnでキャラクタの形をしたウインドウを作りました。
そこに時刻を表示して、今では時計の役割をしています。
非常に愛着があって、いつも画面の右上に置いているのですが少し問題が
あります。
パソコンを起動するたびに、このEXEを実行する必要があるのです。

この問題を解決する方法はないでしょうか。
表示位置はINIファイルに記憶しているので大丈夫です。

492 名前:デフォルトの名無しさん :04/09/02 21:04
スタートアップ

493 名前:デフォルトの名無しさん :04/09/02 21:09
>>490
探してみれ。そして見つかった場所をここに書き込め。

494 名前:デフォルトの名無しさん :04/09/02 21:10
IEってどういった描画の構造をとっているんでしょうか?
BeginPaintとEndPaintをフックしてWM_PAINTを投げてみたのですが、
全く描画されないばかりかフックした関数が呼ばれません。
メモ帳などではきちんとフックに成功してるんですが・・・

495 名前:デフォルトの名無しさん :04/09/02 21:26
普段 SendMessage の WM_CHAR を使ってキーイベントを送っていたのですが、
とあるアプリケーションがどうやら DirectInput でキーを拾っているようで、
SendMessage では反応してくれません。
こういう場合、どういう API でキーを送ればいいでしょうか?

496 名前:デフォルトの名無しさん :04/09/02 21:32
keybd_eventは反応したっけ

497 名前:デフォルトの名無しさん :04/09/02 21:44
CreateDIBSectionで作った画面が何故か真っ黒なんだけどどこでも指定したつもりはないんだけど
どうゆうことでしょう?

498 名前:デフォルトの名無しさん :04/09/02 21:47
age

499 名前:デフォルトの名無しさん :04/09/02 22:03
>>496
keybd_even も反応しないみたいです。

500 名前:デフォルトの名無しさん :04/09/02 22:08
>>494
IE のブラウザ部分は全てオフスクリーンに描画して画面へ転送ってな感じでやってるみたいです。
(除く windowless に対応していない ActiveX の部分)

ページの中身の絵が欲しいのなら、WebBrowser コントロールで表示して GetDocument した
IHTMLDocument (?) あたりで OleDraw すると描けたような記憶があります。
また、時間と興味があるなら、IHTMLPainter インタフェイス辺りから調べていくのもアリかもしれません。

でも BeginPaint も呼んでいないってのは面白いですね。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.