小编Bri*_*pie的帖子

C#通过windows api从文件中获取缩略图

Windows资源管理器可以显示文件的缩略图.这些缩略图由核心和第三方shell扩展提供.

我知道如何扩展shell以向Windows提供缩略图.

我想要做的是使用C#通过shell从系统上的任何文件中检索缩略图.这可能吗?

本质上,我正在编写一个自定义文件浏览器,我想显示缩略图,并且无法解析地球上的每个文件以制作我自己的缩略图.

澄清:许多答案似乎都围绕网页缩略图或缩放图像.但这根本不是我想要的.我想要的是向Windows询问这些文件类型的缩略图:.DOC,.PDF,.3DM,.DWG ......和mabye大约十几个.我不想自己解析,渲染和制作缩略图,因为Windows已经知道如何.

我作为答案发布的代码实际上有用......也许它可以简化并清理一下.

c# windows-shell

69
推荐指数
3
解决办法
6万
查看次数

从C++中的HKEY句柄确定注册表项的路径

给定Windows注册表项的句柄,例如由:: RegOpenKeyEx()设置的句柄,是否可以确定该键的完整路径?

我意识到在一个简单的应用程序中,您只需要查看5行或10行并阅读...但是在我正在调试的复杂应用程序中,我感兴趣的键可以从一系列中打开电话.

c++ registry handle

19
推荐指数
1
解决办法
2万
查看次数

在没有CAPICOM的EXE - C++上验证Authenticode签名

我正在为安装程序DLL编写一个函数来验证已安装在系统上的EXE文件的Authenticode签名.

该功能需要:

A)验证签名是否有效.
B)验证签名者是我们的组织.

因为这是在安装程序,因为这需要运行在旧的Win2k设施,我想要依靠的CAPICOM.dll,因为它可能不是在目标系统上.

的WinVerifyTrust API的伟大工程,以解决(A).

我需要找到一种方法来比较已知证书(或其中的属性)与签署有问题的EXE的证书.

c++ winapi cryptography authenticode

15
推荐指数
1
解决办法
1万
查看次数

MSBuild验证属性

我正在研究一个可重用的MSBuild目标,它将被其他几个任务使用.此目标要求定义多个属性.验证属性是否已定义的最佳方法是什么,如果不是,则抛出错误?

几乎喜欢的两次尝试:

<?xml version="1.0" encoding="utf-8" ?>
  <Project ToolsVersion="3.5" DefaultTarget="Release" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="Release">
    <Error
      Text="Property PropA required"
      Condition="'$(PropA)' == ''"/>
    <Error
      Text="Property PropB required"
      Condition="'$(PropB)' == ''"/>

    <!-- The body of the task -->

  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

这是一次批量尝试.由于额外的"名称"参数,这很难看.是否可以使用Include属性?

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="3.5" DefaultTarget="Release" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Release">
    <!-- MSBuild BuildInParallel="true" Projects="@(ProjectsToBuild)"/ -->
    <ItemGroup>
      <RequiredProperty Include="PropA"><Name>PropA</Name></RequiredProperty>
      <RequiredProperty Include="PropB"><Name>PropB</Name></RequiredProperty>
      <RequiredProperty Include="PropC"><Name>PropC</Name></RequiredProperty>
    </ItemGroup>

    <Error
      Text="Property %(RequiredProperty.Name) required"
      Condition="'$(%(RequiredProperty.Name))' == ''" />

  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

msbuild properties batch-file

14
推荐指数
1
解决办法
4310
查看次数

C#ListView鼠标滚轮没有焦点

我正在制作一个WinForms应用程序,其中ListView设置为详细信息,以便可以显示多个列.

当鼠标悬停在控件上并且用户使用鼠标滚轮时,我希望此列表滚动.现在,滚动仅在ListView具有焦点时发生.

即使没有焦点,我怎样才能使ListView滚动?

.net c# listview scroll

12
推荐指数
2
解决办法
7856
查看次数

Windows窗体调整框架,没有标题栏?

如何从Windows窗体隐藏标题栏但仍具有调整大小框?

c# resize titlebar visual-studio winforms

6
推荐指数
1
解决办法
2万
查看次数

在安装时检测目录的存在

在WiX DirectorySearch中可用于确定目标计算机上是否存在特定目录.但我不明白是否有一致的方法来确定目录存在.

例如:

<Property Id="INSTALLDIR" Secure="yes">
  <RegistrySearch Id='InstallDir' Type='directory'
    Root='HKLM' Key='Software\Company\Product\Install' Name='InstallPath'/>
</Property>
<Property Id='IS_INSTALLED' Secure='yes'>
  <DirectorySearch Id='IsInstalled' Path='[INSTALLDIR]' />
</Property>
Run Code Online (Sandbox Code Playgroud)

当注册表项和目录都存在时,该IS_INSTALLED属性将设置为返回的路径DirectorySearch.

当目录不存在时,IS_INSTALLED似乎设置为"C:\".

是这样的条件:

<Condition>NOT (IS_INSTALLED = "C:\")</Condition>
Run Code Online (Sandbox Code Playgroud)

检测目录被找到的可靠方法?有没有更好的办法?

答:这是基于我接受的mrnxs答案的 WiX代码

<Property Id="PRODUCT_IS_INSTALLED" Secure="yes">
  <RegistrySearch Id='RegistrySearch1' Type='directory'
    Root='HKLM' Key='Software\Company\Product\Version\Install' Name='Path'>
    <DirectorySearch Id='DirectorySearch1' Path='[PRODUCT_IS_INSTALLED]'/>
  </RegistrySearch>
</Property>

<CustomAction Id='SET_INSTALLDIR'
              Property='INSTALLDIR'
              Value='[PRODUCT_IS_INSTALLED]'/>

<InstallExecuteSequence>
  <Custom Action='SET_INSTALLDIR' After='AppSearch'></Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

installer wix

6
推荐指数
1
解决办法
1万
查看次数

加速 WIX 编译

我有一个 WIX 3.0 安装程序,它正在构建 88 个略有不同的版本(32 位和 64 位的交叉产品、11 个语言环境、四个版本(测试版、零售版、评估版、不同评估版)。

除了本地化的 UI 之外,每个构建的内容都略有不同,所以我不能只构建一个具有多个语言环境的配置。

生成的 MSI 大约为 120MB。我已经在使用 CabCache。

每个版本的安装程序需要大约 3-5 分钟的时间来构建,从而导致整体构建时间相当长。

在链接 (light.exe) 期间,安装似乎受到大量磁盘限制。

显然,使磁盘更快可能会有所帮助。有人对如何设置可以更快地通过这些安装程序的机器有建议吗?(或关于重新配置我的 WIX 项目以更有效地构建的建议?)

performance wix wix3

5
推荐指数
1
解决办法
925
查看次数

MSBuild批处理三个独立变量

我一直在编写一个基于MSBuild的构建系统,并且到项目结束时我需要通过批处理三个变量来实际运行一个msbuild文件88次:

Configuration = Debug; 测试版; 发布; 评估
平台= x86; x64
语言= CN; CS; DE; EN; ES; FR; 它; J.P; KO; PL; TW

我想构建:
"Debug x86 CN","Debug x86 CS",..."Debug x86 TW"
"Debug x64 CN",...

当然,我可以定义其中的88个:

<ItemGroup>
  <ToBuild Include="Debug_x86_CN">
    <Configuration>Debug</Configuration>
    <Platform>x86</Platform>
    <Language>EN</Language>
  </ToBuild>
<ItemGroup>
Run Code Online (Sandbox Code Playgroud)

然后基于元数据批处理.但真是拖累!我可以在代码中创建88个排列,因此添加语言就像向ItemGroup添加三个字符一样简单:

<ItemGroup>
  <AllConfigurations Include="Beta; Release; Evaluation;"/>
  <AllPlatforms Include="x86; x64" />
  <AllLanguages Include="CN; CS; DE; EN; ES; FR; IT; JP; KO; PL; TW" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

msbuild batching

4
推荐指数
1
解决办法
951
查看次数

Windows x64上32位和64位应用程序之间的进程间通信

我们想支持最近停产的一些硬件.硬件的驱动程序是一个普通的32位C DLL.我们没有源代码,并且(出于法律原因)对驱动程序的反编译或逆向工程不感兴趣.

硬件快速发送大量数据,因此通信协议需要非常高效.

我们的软件是原生的64位C++应用程序,但我们希望通过32位进程访问硬件.什么是32位和64位应用程序相互通信的有效,优雅的方式(理想情况下,这不涉及发明新协议)?

解决方案应该是C/C++.

更新:一些受访者要求澄清这是用户模式还是内核模式驱动程序.幸运的是,它是一个用户模式驱动程序.

c++ winapi interprocess

3
推荐指数
1
解决办法
3057
查看次数