nonocast

Digital Life

Browsing Posts in Work

acure

No comments

Reference from:  http://www.acure-fun.net/about/index.html
结合在Unilever看到的VR,目前可以感觉到Digital Retail的趋势。
如果数字化还只是专注于辅助性质的营销,像传统的Digital Signage显示广告的模式还是会因为成本等等等因素而被cut掉;要想坚挺,那么必须也不得不将数字化推向营销第一线,类似acure这样的vending machine真的拥有很大的想象空间。

PowerPoint很容易在Slide中插入一个Video,但Video和Image不同的是,Video属于外部链接,不像Image会嵌到ppt(x)文件中。
换句话说,如果仅仅将ppt(x)文件给别人(usb-key或是mail),那么别人是无法看到其中的Video的。
做了几个小的实验,发现如下现象:
1. ppt(x)中会记录Video的LocalPath,如果你将你电脑上的D:\videos\test.wmv放入这个ppt(x),那么ppt(x)会记住这个路径。
2. 如果你把D:\videos\test.wmv删除,那么ppt(x)则无法播放这个Video。
3. 如果你把D:\videos\test.wmv剪切(cut)到ppt(x)所在目录,则又能播放。
4. 如果你把另外一个video以test.wmv的名字放到ppt(x)所在目录,并且把D:\videos\test.wmv删除,则ppt(x)播放替换的Video。

有点绕,其实就一句话,
当你给别人PowerPoint的时候,除了采用Publish CD的方式,同样可以将Video copy到ppt(x)同一目录下解决Video Link的问题。

该有的都有了,包括了WM_*和参数Enum
Win32.cs
鼠标键盘模拟操作
Simulation.cs
鼠标键盘Hook
MouseKeyboardHook.dll

通过VS2010创建Windows Service真的很简单,看图说话,

然后在OnStart和OnStop中填空即可,第二部是配置Service,通过在Service的Design视图右键Add Installer,然后打开Installer进行配置,如图,

Build后就生成了service的exe,这里提一下和非service exe的区别,
1. 不能F5直接运行,需要通过命令行安装到service中,如下:
installutil YourService.exe
卸载service
installutil /u YourService.exe
你可以通过bat来制作安装/卸载的script
2. ‘运行’中输入services.msc可以快速打开’服务’控制台
通过命令’net start YourService’启动你的service,反之’net stop YourService’来关闭。
3. 很多TX抱怨service会很隐晦,不方便调试之类的,童鞋,请使用微软牌日志,药到病除。

如果一个目录文件如下:

  • 幻灯片1
  • 幻灯片2
  • 幻灯片3
  • 幻灯片4
  • 幻灯片10
  • 幻灯片11
  • 幻灯片12

在程序中当你需要枚举显示这些文件时,写下如下代码:

foreach (var each in Directory.GetFiles(@"c:\theFolder")) {
	Console.WriteLine(each);
}

显示结果不能说奇怪,只是说一定和你期望值有差距,如下

  • 幻灯片1
  • 幻灯片10
  • 幻灯片11
  • 幻灯片12
  • 幻灯片2
  • 幻灯片3
  • 幻灯片4

怎么解决?竟然需要动用API, StrCmpLogicalW
增加Sort,如下

List files = new List(Directory.GetFiles(@"c:\theFolder"));
files.Sort(new StringLogicalComparer());
foreach (var each in files) {
	Console.WriteLine(each);
}

StringLogicalComparer代码如下:

public class StringLogicalComparer : IComparer {
	[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
	public static extern int StrCmpLogicalW(string x, string y);

	public int Compare(string x, string y) {
		return StrCmpLogicalW((string)x, (string)y);
	}
}

Everything is OK. Enjoy it.

BItmapImage默认情况下是不会进行Preload,之前google竟然也没有什么办法,本来考虑尝试一下thumbnail,隔天再想这个问题突然灵光一闪,Yes,MemoryStream。

<MediaElement x:Name=”video” MediaEnded=”video_MediaEnded” Stretch=”Fill” LoadedBehavior=”Manual” />
增加MediaEnded事件响应,事件响应代码如下:

private void video_MediaEnded(object sender, RoutedEventArgs e) {
	this.video.Position = TimeSpan.FromSeconds(0);
	this.video.Play();
}

关键是需要重置video的Position。

string path = @"D:\Snow.Leopard\Snow-Leopard-Prowl.jpg";
Console.WriteLine(File.Exists(path));
Console.WriteLine(File.Exists(new Uri(path).LocalPath));

string uri = @"file:///D:/Snow.Leopard/Snow-Leopard-Prowl.jpg";
Console.WriteLine(File.Exists(uri));
Console.WriteLine(File.Exists(new Uri(uri).LocalPath));

Output:

  • True
  • True
  • False
  • True

Log4xxx确实是一个能够跨语言跨平台的Solution,不过确实存在几个问题:

  • 过于繁琐的配置,每次项目需要copy-paste,而且哪里记得那么多logger和参数
  • 如果采用txt,当日志很多的时候,虽然可以配合工具进行分析,不过还是略显简单和粗糙

如果在Windows平台下,个人觉得还是借助Windows提供的日志机制更为经济。
关于EventLog的文章直接在google就O了,不过这里需要提几个点:
1. 删除自定义日志,貌似没有GUI,需要注册表删除,然后删除evtx文件。
eventlog的相关信息基本都在下面能找到,包括log-source的绑定关系
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
2. 一旦source进行绑定后,如果需要修改这个source-log的关系,则需要手动在log节点下删除source项。然后重新CreateEventSource。发现通过代码DeleteEventSource无效。
http://www.eggheadcafe.com/community/aspnet/2/10022041/writing-to-custom-event-log.aspx

Once you create an event source, you cannot reuse that event source name. The framework searches through all of the event sources on the machine, and if it finds one that matches the name, it uses it. To make the code work properly, you need to create a new event source.

其实操作注册表就好了,注册表其实就是Windows的根据地,不要客气,兄弟们,上。
项目中封装了一个Logger,供大家参考,;等项目结束后,想写一下Log的实践,其实还是很有讲究的。

PowerPoint 2007另存为图片后发现文字边缘存在明显锯齿,而且最奇怪的事情是同样的PPT有些机器好有些机器不好,折腾了一个晚上,OMG,原来没有打SP2.
解决方法说来也无比简单,不过如果能上手就意识到版本问题可能就不会兜那么大一圈了,从字体折腾到显卡最后才发现是SP的问题。请一定记得在解决问题前核对版本号。